Pandas:基于现有数据,将列附加到数据框,作为链式操作

Pandas: Appending a column to a data frame, based on the existing data, as a chained operation

我创建了一个数据框:

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

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

您可以 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)]