[英]Pandas add a column and fill values by using list comprehension if else
我想在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
您可以使用numpy.where
通過創建面膜isnull
:
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_first
或fillna
解決方案:
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
解決方案:
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
除了jezraels答案外,您還可以使用pandas Assign 函數 。 例如,他的fillna解決方案可能會以以下形式重鑄
tm.assign(A = lambda x:x.a1.fillna(x.a2))
這在熊貓管道中可能是有利的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.