簡體   English   中英

熊貓添加列並通過使用列表理解來填充值

[英]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_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解決方案:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM