根据pandas中的其他列和条件替换列值

时间:2021-02-05 13:38:53

标签: python pandas

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

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

然后将 COL2 值替换为 OK 如果 COL2,COL3,COL4 == "NaN" & COL5 在 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"

2 个答案:

答案 0 :(得分:2)

试试 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

答案 1 :(得分:1)

也许很简单:

df.loc[df['COL2 COL3 COL4'.split()].isna().all(axis=1) & df['COL5'].isin({'A', 'B'}), 'COL2'] = 'OK'