簡體   English   中英

如果另一列的值匹配,如何在列中填充 nan 值

[英]How to fill nan values in a column if the value from another column matches

假設我有一個像這樣的 dataframe:

      col1         col2     col3
0     data1         0        NaN
1     data1         0        NaN
2     data1         1        Done
3     data2         0        NaN
4     data2         1      To be done
5     data3         0        NaN
6     data3         1        Fail

如何替換 col3 中的 nan 值,例如: col1 中的 data1 在 col3 中有一行“完成”,我如何將此值傳遞給 col3 中包含 col1 中的 data1 的所有 NaN 行?

理想的 df 看起來像這樣:

      col1         col2      col3
0     data1         0        Done
1     data1         0        Done
2     data1         1        Done
3     data2         0      To be done
4     data2         1      To be done
5     data3         0        Fail
6     data3         1        Fail

使用groupby + bfill

df['col3'] = df.groupby('col1')['col3'].bfill()
print(df)

# Output:
    col1  col2        col3
0  data1     0        Done
1  data1     0        Done
2  data1     1        Done
3  data2     0  To be done
4  data2     1  To be done
5  data3     0        Fail
6  data3     1        Fail

一種方法是在 col1 上創建一個字典和 map:

d = dict(df.dropna()[['col1', 'col3']].values)
df['col3'] = df['col1'].map(d)
col1 col2 col3
0 數據1 0 完畢
1 數據1 0 完畢
2 數據1 1 完畢
3 數據2 0 待辦
4 數據2 1 待辦
5 數據3 0 失敗
6 數據3 1 失敗

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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