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

如何对含重复时间索引的pandas DataFrame应用滚动均值且保留所有观测值

解决方案

核心逻辑为先按时间t聚合每个时间点所有观测值的总和与计数,再用长度为2的滚动窗口计算窗口内总数值之和除以总观测数,偏移1位后即可得到每个时间点对应的过去2天均值,全程不会丢弃任何原始有效数据。

实现代码

import pandas as pd

# 示例数据
df = pd.DataFrame({
    'id': [1,1,1,2,3,3,4,4,4],
    't': [1, 2, 3, 2, 1, 2, 2, 3, 4],
    'v1':[1, 2, 3, 4, 5, 6, 7, 8, 9]
})

# 按时间t聚合每个时间点的v1总和与观测数量
agg_df = df.groupby('t')['v1'].agg(sum_v='sum', count_v='count')
# 补全所有连续时间索引,包含最大t+1以覆盖所有预期输出时间点
max_t = df['t'].max()
agg_df = agg_df.reindex(range(1, max_t + 2)).sort_index()

# 计算2天窗口的滚动总和与总观测数,偏移1位对应目标时间t的过去2天范围
rolling_sum = agg_df['sum_v'].rolling(window=2, min_periods=2).sum().shift(1)
rolling_count = agg_df['count_v'].rolling(window=2, min_periods=2).sum().shift(1)

# 计算均值,保留3位小数,空值替换为-
result = (rolling_sum / rolling_count).round(3).fillna('-').reset_index(name='v2')
print(result)

输出结果

tv2
1-
2-
34.167
45.0
56.667

如果你的时间列为日期格式,把reindex步骤替换为按天重采样补全连续日期即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:45:05