我创建一个数据框:
import pandas as pd
df = pd.DataFrame({'FOO': [0,1,2], 'BAR': ['a','b','c']})
FOO BAR
0 0 a
1 1 b
2 2 c
现在,我根据现有列的值过滤行并追加一列:
df = df[lambda x: x['FOO']>0]
df['BAZ'] = df['BAR'].map(lambda x: x+'z')
FOO BAR BAZ
1 1 b bz
2 2 c cz
是否可以通过操作链接方式在一行上对列进行过滤和附加? 我能够做到这一点:
df = df[lambda x: x['FOO']>0].join(df[lambda x: x['FOO']>0]['BAR'].map(lambda x: x+'z').rename('BAZ'))
但这是不可取的,因为我必须重复过滤。
答案 0 :(得分:1)
您可以在过滤器后使用assign
lambda
:
df.loc[df.FOO.gt(0)].assign(BAZ = lambda x: x.BAR+'z')
# FOO BAR BAZ
#1 1 b bz
#2 2 c cz
也可以先分配然后过滤,但是如果您过滤掉许多行,则效果不佳:
df.assign(BAZ = df.BAR+'z').loc[df.FOO.gt(0)]