2016-11-30 62 views
2

我想在df中添加一個列名A,並填寫值。如果列a1有值,請使用df.a1填充df.A,否則使用df.a2填充df.A。熊貓添加一列,並通過使用列表理解填充值,否則

tm = pd.DataFrame({'a1':['astr1',np.nan,'astr2',np.nan],'a2':[np.nan,np.nan,np.nan,'astr3']}) 
tm 

    a1  a2 
0 str1 NaN 
1 NaN  NaN 
2 str2 NaN 
3 NaN  str2 

我想要這個。

a1  a2  A 
0 str1 NaN  str1 
1 NaN  NaN  NaN 
2 str2 NaN  str2 
3 NaN  str2  str2 

回答

3

可以使用numpy.whereisnull創建面膜:

tm['A'] = np.where(tm.a1.isnull(), tm.a2, tm.a1) 
print (tm) 

     a1  a2  A 
0 astr1 NaN astr1 
1 NaN NaN NaN 
2 astr2 NaN astr2 
3 NaN astr3 astr3 

combine_firstfillna另一種解決方案:

tm['A'] = tm.a1.combine_first(tm.a2) 
print (tm) 
     a1  a2  A 
0 astr1 NaN astr1 
1 NaN NaN NaN 
2 astr2 NaN astr2 
3 NaN astr3 astr3 

tm['A'] = tm.a1.fillna(tm.a2) 
print (tm) 
     a1  a2  A 
0 astr1 NaN astr1 
1 NaN NaN NaN 
2 astr2 NaN astr2 
3 NaN astr3 astr3 

和升與update AST解決方案:

tm['A'] = tm.a1 
tm.A.update(tm.a2) 
print (tm) 
     a1  a2  A 
0 astr1 NaN astr1 
1 NaN NaN NaN 
2 astr2 NaN astr2 
3 NaN astr3 astr3 
+0

它的工作原理,TKS!... –

+0

相當全面。 +1先生。 – Zero

+0

@runningman - 如果我的回答很有幫助,請不要忘記[接受](http://meta.stackexchange.com/a/5235/295067)它。謝謝。 – jezrael

3

除了jezraels答案,你也可以使用熊貓assign function。 例如他fillna解決方案也許重鑄形式

tm.assign(A = lambda x:x.a1.fillna(x.a2)) 

這可能是有利的大熊貓管道