如何无需for循环计算Pandas DataFrame列的偏移1行累积和?
用Pandas内置函数替代循环实现偏移累积和
你需要的逻辑本质是:列b的首项为0,后续每一项是列a前i项的累积和(i从0开始到当前索引-1)。完全可以用Pandas内置的cumsum()函数结合简单操作实现,无需手动循环,效率更高。
方法一:结合cumsum()与shift()
先对列a计算累积和,再将结果整体向下偏移1行,最后把首行的缺失值填充为0:
import pandas as pd df = pd.DataFrame({'a': [1, 2, 3, 4]}) # 计算偏移累积和 df['b'] = df['a'].cumsum().shift(1).fillna(0).astype(int) print(df)
输出结果:
a b 0 1 0 1 2 1 2 3 3 3 4 6
方法二:直接拼接累积和前n-1项
先计算列a的累积和,取前n-1项(n为数据行数),再在前面拼接一个0:
import pandas as pd df = pd.DataFrame({'a': [1, 2, 3, 4]}) # 拼接生成列b df['b'] = [0] + df['a'].cumsum().tolist()[:-1] print(df)
同样会得到符合要求的结果。
两种方法都避免了手动循环,在处理大规模数据集时,性能会远优于循环实现。
内容的提问来源于stack exchange,提问作者roulette01
相关产品推荐
相关产品推荐

