假设您有以下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中)也会失败。
有没有办法更快或更优雅地获得类似的结果? 此外,如果您要添加使用例如的列,则会出现同样的问题。刚刚定义的列的总和。据我所知,这总是需要两次分配呼叫。
答案 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