如何为Pandas DataFrame添加基于上一行值累加的新列?
解决方案
你的需求本质是生成一列累加值,初始值为-25,后续每行等于上一行的X值加上当前行的Intervals值。你之前用shift失败的原因是:赋值时Table["X"]尚未完全初始化,shift(1)无法获取到已赋值的前一行数据,最终除第一行外都会得到NaN。
推荐两种高效的实现方式:
方法一:利用cumsum(推荐,性能最优)
直接对Intervals列计算累加和,再加上初始值-25即可,完全匹配你的需求:
Table["X"] = -25 + Table["Intervals"].cumsum()
验证逻辑:
- 第1行:
-25 + 0 = -25(符合初始值要求) - 第2行:
-25 + (0+4) = -21(即上一行X+当前Intervals) - 第3行:
-25 + (0+4-1) = -22(同上逻辑)
以此类推,完全符合你的累加规则。
方法二:循环赋值(适合复杂自定义逻辑)
如果后续需要更复杂的累加规则,可以用循环逐行计算:
# 初始化X列 Table["X"] = 0 # 设置第一行初始值 Table.loc[0, "X"] = -25 # 从第二行开始循环计算 for idx in range(1, len(Table)): Table.loc[idx, "X"] = Table.loc[idx-1, "X"] + Table.loc[idx, "Intervals"]
内容的提问来源于stack exchange,提问作者Naor
相关产品推荐
相关产品推荐

