You need to enable JavaScript to run this app. Pandas如何计算DataFrame每行对应未来7天指定列的数值总和
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何计算DataFrame每行对应未来7天指定列的数值总和

问题原因

你原先的写法是整列向量化比较,df.date > df.date 会对两个完全相同的列逐元素判断,结果全为False,筛选不到任何数据,求和结果为0,赋值给整列后自然全是0。

最优解决方案:使用pandas时间滚动窗口

该方案性能最优,适合大数据量场景,代码如下:

import pandas as pd
from datetime import timedelta

# 首先确保date列为datetime类型
df['date'] = pd.to_datetime(df['date'])
# 将date设为索引并按时间排序,滚动窗口要求时间有序
df = df.set_index('date').sort_index()
# 计算7天滚动窗口的value总和,减去当前行的value(需求为统计未来7天、不含当前行)
df['next_7days'] = df.rolling('7D', closed='right').sum()['value'] - df['value']
# 重置索引恢复原始结构
df = df.reset_index()

运行后得到的next_7days和你的预期结果完全一致。

备用方案:逐行apply(逻辑易读,适合小数据量)

如果数据量不大,想要更直观的逻辑可以用该方案:

import pandas as pd
from datetime import timedelta

df['date'] = pd.to_datetime(df['date'])
df['temp_end'] = df['date'] + timedelta(days=7)
# 逐行筛选符合日期范围的value求和
df['next_7days'] = df.apply(
    lambda row: df[(df['date'] > row['date']) & (df['date'] <= row['temp_end'])]['value'].sum(),
    axis=1
)
# 删除临时列
df = df.drop('temp_end', axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 18:06:04