首页 > 解决方案 > 替换列值取决于熊猫中的其他列和条件

问题描述

您好,我有一个数据框,例如

COL1 COL2 COL3 COL4 COL5
G1   NaN  NaN  NaN  A
G1   NaN  Lop  NaN  A 
G2   NaN  NaN  NaN  B 
G3   Sil  NaN  SLO  A
G4   NaN  NaN  NaN  C
G4   LIJ  KYI  NaN  B

然后用if & COL5替换COL2值的想法是OKCOL2,COL3,COL4 == "NaN"list("A","B")

我应该得到

COL1 COL2 COL3 COL4 COL5
G1   OK   NaN  NaN  A
G1   NaN  Lop  NaN  A 
G2   OK  NaN  NaN  B 
G3   Sil  NaN  SLO  A
G4   NaN  NaN  NaN  C
G4   LIJ  KYI  NaN  B

到目前为止,我尝试过:

tab['COL2'][(tab['COL2'].isna()) & (tab['COL3'].isna()) & (tab['COL4'].isna()) & tab['COL5'].str.contains("A|B"))] = "OK"

标签: pythonpandas

解决方案


试试all+isna

df.loc[df.COL5.isin(['A','B']) & df[['COL2','COL3','COL4']].isna().all(1),'COL2']='OK'
df
Out[22]: 
   COL1 COL2 COL3 COL4 COL5
0   G1   OK  NaN  NaN    A
1   G1  NaN  Lop  NaN    A
2   G2   OK  NaN  NaN    B
3   G3  Sil  NaN  SLO    A
4   G4  NaN  NaN  NaN    C
5   G4  LIJ  KYI  NaN    B

推荐阅读