Pandas基于各行日期计算前7天Data字段平均值的实现
时序滚动均值实现方案
核心处理逻辑
- 首先将字符串格式的
Date列转换为pandas标准日期格式,确保时序排序、窗口计算的准确性 - 按
Circle、Node字段做数据分组,从根源上避免跨分组的数据串扰,保证每个独立序列的均值计算独立完成 - 对每个分组的
Data序列做1位偏移后,开启长度为7的滚动窗口计算均值,精准匹配“基准日之前连续7天、不含基准日本身”的计算规则 - 过滤掉前置数据不足7天、无法输出有效均值的记录,最终输出结构和示例要求完全对齐
可直接复用的代码
import pandas as pd # 1. 日期格式转换,适配时序计算 df1['Date'] = pd.to_datetime(df1['Date'], format='%m/%d/%Y') # 2. 分组计算前置7天滚动均值(排除基准日本身的Data值) df1['Average'] = df1.groupby(['Circle', 'Node'])['Data'].transform( lambda series: series.shift(1).rolling(window=7, min_periods=7).mean() ) # 3. 过滤无效空值,重置索引得到目标结果df2 df2 = df1.dropna(subset=['Average']).reset_index(drop=True) # 4. 按示例要求保留4位小数 df2['Average'] = df2['Average'].round(4)
结果准确性校验
以示例中的3/22/2021基准日为例,其对应前置7天(3/15/2021-3/21/2021)的Data值计算得到的平均值为99.2443,和给出的输出值完全匹配;其余基准日的计算逻辑与示例一致,可复现全部输出的Average数值。
关键参数说明
shift(1):将基准日数据从计算窗口中剔除,确保窗口仅覆盖基准日之前的记录window=7:固定窗口长度为7,对应连续7天的统计范围min_periods=7:仅当窗口内凑齐完整7条数据时才输出均值,不足则返回空值,避免计算偏差- 分组逻辑适配多场景扩展:即使后续数据集新增其他Circle、Node的序列,也不会出现跨组计算的错误
内容的提问来源于stack exchange,提问作者Rajeev Dubey
相关产品推荐
相关产品推荐

