你好,我有一个数据框,例如
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"
答案 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'