我正在尝试将其应用于我的数据帧:每行:
- 如果row ['cola'] =='none',然后row ['cola'] = row ['colx']
- elif row ['cola']!='none'&行['colb'] =='none',然后行['colb'] = row ['colx']
等等。我正在尝试使用lambda函数进行此操作:
dataframe.apply(lambda row: row['colA']=row['result'] if row['colA']=='NONE' else (row['colB']=row['result'] if row['colA']!='NONE' & row['colB']!='NONE'),axis=0)
但是当然不起作用。有没有办法做类似的事情?如果没有,我可以通过列务逻辑运行列来解决它,但我想知道是否有一种更快的方法。
谢谢
可能是(最好始终将一些示例数据发布以测试):
df=df.replace('NONE',np.nan)
df['colA']=df['colA'].fillna(df['colX'])
df['colB']=np.where(df['colA'].notnull()&df['colB'].isnull(),df['colB'].fillna(df['colX']),df['colB'])
#alternative for above line->
#df.loc[df.colA.notnull()&df.colB.isnull(),'colB']=df.loc[df.colA.notnull()&df.colB.isnull(),'colB'].fillna(df['colX'])
如果 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