熊猫:根据现有数据,将一列添加到数据框,作为链接操作

时间:2019-01-17 16:07:44

标签: pandas chaining method-chaining

我创建一个数据框:

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'))

但这是不可取的,因为我必须重复过滤。

1 个答案:

答案 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)]