Pipe Pipe pandas:创建依赖于新创建的pandas的列

时间:2017-12-05 16:19:14

标签: pandas

假设您有以下DataFrame

df=pd.DataFrame({'A': [1, 2]})

现在我想构建列B = A + 1,然后列C = A + 2和D = B + C.这些计算仅仅是为了简单起见。通常情况下,我想使用一些例如非线性变换,归一化等。

可以做的是以下内容:

df.assign(**{'B': lambda x: x['A'] +1, 'C': lambda x :['A']+2})\
    .assign(**{'D':lambda x: x['B']+ x['C']})

然而,这显然有点烦人,特别是,如果您在管道中有大量预处理步骤。将两个词典放在一起(即使在orderedDict中)也会失败。

有没有办法更快或更优雅地获得类似的结果? 此外,如果您要添加使用例如的列,则会出现同样的问题。刚刚定义的列的总和。据我所知,这总是需要两次分配呼叫。

1 个答案:

答案 0 :(得分:1)

您可以使用eval

df.eval("""
  B= A+1
  C= A+2
  D = B+C""", inplace=False)
Out[625]: 
   A  B  C  D
0  1  2  3  5
1  2  3  4  7

如果您想在查询''

中进行计算
df.eval('B=A.max()',inplace=True)
df
Out[647]: 
   A  B
0  1  2
1  2  2