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

基于分组重采样数据并计算滚动求和,求无循环新增DataFrame列方案

解决方案:无循环为DataFrame添加滚动求和列

针对你的需求——无需循环,从DataFrame末尾开始提取每第n行并计算前x个的滚动求和,我们可以利用pandas的索引切片和滚动计算功能来实现,全程无需手动循环。

步骤1:构建示例DataFrame

首先把你提供的样本数据转换成pandas DataFrame:

import pandas as pd
import numpy as np

# 你的样本数据
data = {
    'date': ['8/30/2019', '9/6/2019', '9/13/2019', '9/20/2019', '9/27/2019',
             '10/4/2019', '10/11/2019', '10/18/2019', '10/25/2019', '11/1/2019',
             '11/8/2019', '11/15/2019', '11/22/2019'],
    'value': [2, 4, 1, 2, 3, 3, 5, 5, 7, 4, 9, 6, 5]
}

df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])

步骤2:提取从末尾开始的每第n行

我们需要先定位到所有从DataFrame末尾开始的第n行(这里n=5)。可以通过索引反转+切片的方式快速获取这些行的索引:

n = 5
# 反转索引,每n个取一个,再反转回来得到原顺序的目标索引
target_indices = df.index[::-1][::n][::-1]

这一步会得到从前往后数,每间隔n-1行的索引(从末尾开始算的第n行),对应你样本里的9/13/2019、10/18/2019、11/22/2019这几行。

步骤3:计算前x个数值的滚动求和

接下来提取这些行的value值,并用rolling()函数计算前x=2个的滚动求和:

x = 2
# 提取目标行的value
selected_values = df.loc[target_indices, 'value']
# 计算滚动求和,设置min_periods=1可以保留第一个值(如果不需要可去掉,第一个值会是NaN)
rolling_sums = selected_values.rolling(window=x, min_periods=1).sum()

步骤4:将结果映射回原DataFrame

最后新建一列,把滚动求和的结果赋值到对应的行,其他行填充NaN:

df['rolling_sum'] = np.nan
df.loc[rolling_sums.index, 'rolling_sum'] = rolling_sums

适配你的示例结果

如果你的实际需求是对每个行,取它和它往前数第k行的value求和(对应你给出的示例结果),那可以直接用shift()函数实现,更简洁:

# 这里k根据你的示例结果调整,比如对应11/22的5+7=12,k=3
k = 3
df['rolling_sum'] = df['value'] + df['value'].shift(k)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:12:57