你好,我有一个数据帧,例如
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,COL3,COL4 == "NaN"
& COL5list("A","B")
,则用OK
替换COL2
值
的想法我应该得到
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"
尝试使用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
也许很简单:
df.loc[df['COL2 COL3 COL4'.split()].isna().all(axis=1) & df['COL5'].isin({'A', 'B'}), 'COL2'] = 'OK'