Если NONE
- это string
s, то сравните для логических масок, ~
- для инвертированной маски и установите значения на loc
:
df = pd.DataFrame({'colA':['NONE', 'A', 'NONE', 'D'],
'colB':['NONE', 'B', 'C', 'NONE'],
'colX':['a','b','c','d']})
print (df)
colA colB colX
0 NONE NONE a
1 A B b
2 NONE C c
3 D NONE d
m1 = df['colA']=='NONE'
m2 = ~m1 & (df['colB']=='NONE')
df.loc[m1, 'colA'] = df.loc[m1, 'colX']
df.loc[m2, 'colB'] = df.loc[m2, 'colX']
print (df)
colA colB colX
0 a NONE a
1 A B b
2 c C c
3 D d d
И если NONE
- это None
или NaN
(пропущенное значение) изменить логические маски:
df = pd.DataFrame({'colA':[None, 'A',None, 'D'],
'colB':[None, 'B', 'C', None],
'colX':['a','b','c','d']})
print (df)
colA colB colX
0 None None a
1 A B b
2 None C c
3 D None d
m1 = df['colA'].isnull()
m2 = ~m1 & df['colB'].isnull()
df.loc[m1, 'colA'] = df.loc[m1, 'colX']
df.loc[m2, 'colB'] = df.loc[m2, 'colX']
print (df)
colA colB colX
0 a None a
1 A B b
2 c C c
3 D d d