如何在pandas DataFrame中垂直应用函数实现列值相邻行求和
正确实现方案
原代码报错原因
- 语法错误:lambda表达式括号未闭合,
axis=1是apply方法的参数,被错误放到了自定义add函数的传参位置 - 逻辑错误:按行调用
apply只能获取当前行的字段值,无法直接拿到前一行的A列数值,你的add函数需要两个入参但仅传入了当前行的A值,自然无法运行
最简实现方案
pandas内置的shift方法可以直接将列偏移指定行数,你要的计算逻辑可以一行代码搞定:
import pandas as pd df = pd.DataFrame({'A':[1,2,3,4,5]}) # shift(1)将A列向下偏移1行,空值补0后和当前A列相加 df['add'] = df['A'] + df['A'].shift(1, fill_value=0) print(df)
运行后即可得到你期望的输出:
A add 0 1 1 1 2 3 2 3 5 3 4 7 4 5 9
如果你坚持要用apply方法实现
可以通过记录上一行值的方式完成,示例如下:
import pandas as pd df = pd.DataFrame({'A':[1,2,3,4,5]}) prev = 0 def add_current_prev(current): global prev res = current + prev prev = current return res df['add'] = df['A'].apply(add_current_prev)
注意这种方式需要依赖外部变量记录状态,性能远不如直接用shift的向量运算方案,仅做参考。
内容的提问来源于stack exchange,提问作者Royal
相关产品推荐
相关产品推荐

