Pandas中如何为DataFrame新增同列相邻行求和的新列
实现思路
你需要的同列相邻行求和需求,完全可以通过pandas内置的shift()移位方法实现,不需要手动逐行循环遍历,执行效率更高。
核心逻辑
你定义的新列规则是d1[i] + d1[i+1],也就是每一行的取值为当前行的d1值,加上同列下一行的d1值:
shift(-1)可以将d1整列向上移动1位,移位后每个行位置刚好对齐到“当前行的下一行d1值”- 将原d1列和移位后的d1列逐行相加,就能得到符合要求的求和结果
可直接运行的代码
import pandas as pd # 复现你给出的初始数据结构 df = pd.DataFrame({ "d1": [780, 784, 846, 843, 820, 819, 819, 820, 822], "d2": [37.0, 38.1, 38.1, 38.0, 36.3, 36.3, 36.4, 36.3, 36.4], "d3": [21.4, 21.4, 21.4, 21.5, 22.9, 22.9, 22.9, 22.9, 22.9], "d4": [122840.0, 122860.0, 122880.0, 122900.0, 133220.0, 133240.0, 133260.0, 133280.0, 133300.0] }) # 新增d5列完成相邻行求和 df["d5"] = df["d1"] + df["d1"].shift(-1)
结果对照
计算得到的前3行输出和你给出的预期效果完全匹配:
| d1 | d2 | d3 | d4 | d5 |
|---|---|---|---|---|
| 780 | 37.0 | 21.4 | 122840.0 | 1564.0 |
| 784 | 38.1 | 21.4 | 122860.0 | 1630.0 |
| 846 | 38.1 | 21.4 | 122880.0 | 1689.0 |
注意事项
- 因为最后一行没有对应的下一行d1值,移位后最后一行的d5会自动填充为
NaN,如果不需要保留该行结果,可以用df.dropna(subset=["d5"])过滤掉。 - 如果后续需要调整求和方向(比如计算当前行和上一行的d1和),只需要把
shift(-1)替换为shift(1)即可:shift的参数为正时代表列向下移位(取上一行的值),为负时代表列向上移位(取下一行的值)。
内容的提问来源于stack exchange,提问作者user123
相关产品推荐
相关产品推荐

