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

Pandas分组滚动聚合时如何保留日期字段的技术咨询

保留滚动统计结果对应的日期字段

你可以通过以下两种方式解决结果丢失date字段的问题:

方法1:将日期设为多级索引后计算

把id和date设为多级索引,滚动统计的结果会保留这两个索引,后续通过reset_index()可将它们转回列:

import pandas as pd
df = pd.DataFrame({'id': [1, 1, 1, 2, 2, 2], 
                   'date': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-01', '2023-01-02', '2023-01-03'],
                   'value': [5, 4, 7, 2, 7, 1]})
df['date'] = pd.to_datetime(df['date'])

# 设置多级索引
df_indexed = df.set_index(['id', 'date'])
# 计算滚动统计并重置索引
rolling_result = df_indexed.groupby('id')['value'].rolling(2).agg({'sum': 'sum', 'mean': 'mean'}).reset_index()
print(rolling_result)

输出会包含id、date以及对应的滚动统计值,每个统计结果都能匹配到对应的日期。

方法2:用transform直接在原表添加统计列

使用transform可以将滚动统计结果直接对齐到原DataFrame的行,自然保留所有原有字段(包括date):

import pandas as pd
df = pd.DataFrame({'id': [1, 1, 1, 2, 2, 2], 
                   'date': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-01', '2023-01-02', '2023-01-03'],
                   'value': [5, 4, 7, 2, 7, 1]})
df['date'] = pd.to_datetime(df['date'])

# 添加滚动统计列
df['rolling_sum'] = df.groupby('id')['value'].rolling(2).sum().reset_index(level=0, drop=True)
df['rolling_mean'] = df.groupby('id')['value'].rolling(2).mean().reset_index(level=0, drop=True)
print(df)

这种方式无需额外处理索引,直接在原数据基础上新增统计字段,日期字段会和统计值一一对应。

原代码的问题在于仅对value列执行滚动操作,结果索引只保留了分组的id和滚动的位置序号,因此丢失了date字段。上述两种方法通过索引关联或行对齐的方式,确保日期信息不会丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 23:47:54