chippycentra
chippycentra

Reputation: 3432

Replace on column value dependgin on other columns and conditions in pandas

Hello I have a dataframe such as

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

Then the idea it to replace COL2 values by OK if COL2,COL3,COL4 == "NaN" & COL5 is in list("A","B")

I should get

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

So far I tried:

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

Upvotes: 0

Views: 33

Answers (2)

Pierre D
Pierre D

Reputation: 26201

perhaps simply:

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

Upvotes: 1

BENY
BENY

Reputation: 323226

Try with 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

Upvotes: 2

Related Questions