热线电话:13121318867

登录
2019-02-25 阅读量: 667
数据帧行与列交互的Lambda

我正在尝试将其应用于我的数据框:对于每一行:

如果row ['colA'] =='NONE'则行['colA'] = row ['colX']

elif row ['colA']!='NONE'&row ['colB'] =='NONE'然后row ['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)

但当然不行。有没有办法做类似的事情?如果不是,我可以逐行应用迭代逻辑,但我想知道是否有更快的方法来实现它。

解决办法:如果NONE是string比较布尔掩码,~则用于反转掩码和设置值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

0.0000
1
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子