You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向量化实现Pandas DataFrame新增列y=x+剩余行n的求和?

向量化实现Pandas中当前行到末尾的求和并生成新列

我需要在小型DataFrame df 中创建新列y,y的值为x列加上n列从当前行到最后一行的求和:第一行用df.n.sum(),第二行用df.n.iloc[1:].sum(),以此类推。希望用向量化方式实现,避免for循环。

原始代码示例:

import pandas as pd

df = pd.DataFrame({'n':[4,5,6,7,8,9],
                   'x':[1,2,3,4,5,6]})

# 目前的尝试(不符合需求)
df['y'] = df.x + df.n.sum() #?

通过for循环实现的预期求和结果:

output = [df.n.iloc[i:].sum() for i in range(len(df))]
print(output)
# 输出: [39, 35, 30, 24, 17, 9]

向量化实现方案

核心思路是利用Pandas的cumsum()方法,通过反转序列计算从当前行到末尾的累积和,再与x列相加得到y列。

代码实现:

import pandas as pd

df = pd.DataFrame({'n':[4,5,6,7,8,9], 'x':[1,2,3,4,5,6]})

# 计算n列从当前行到末尾的求和(向量化方式)
n_rev_cumsum = df['n'][::-1].cumsum()[::-1]

# 生成目标列y
df['y'] = df['x'] + n_rev_cumsum

print(df)

输出结果:

n  x   y
0  4  1  40
1  5  2  37
2  6  3  33
3  7  4  28
4  8  5  22
5  9  6  15

原理说明

  1. df['n'][::-1]:将n列的顺序反转,得到[9,8,7,6,5,4]
  2. .cumsum():对反转后的序列计算累积和,得到[9,17,24,30,35,39]
  3. [::-1]:再次反转,得到原序列中从当前行到末尾的求和结果[39,35,30,24,17,9]
  4. 最后将该结果与x列逐行相加,得到目标列y

这种方式完全基于Pandas的向量化操作,避免了Python循环的性能损耗,在数据量较大时优势尤为明显。

内容的提问来源于stack exchange,提问作者Henri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 10:55:21