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

如何用Pandas计算每月最后14天的14天滚动均值

使用Pandas计算每年各月最后14天的滚动月末均值

需求说明

基于包含Month、Day、Year、Var1列的数据集,计算每年每个月份最后14天的滚动月末均值(即每个月最后一天的14天滚动均值,不足14天时用已有数据计算),最终输出每个月对应的结果。

样例数据

Month   Day Year    Var1
1   1   2022    8
1   2   2022    8
1   3   2022    17
1   4   2022    1
1   5   2022    10
1   6   2022    21
1   7   2022    9
1   8   2022    18
1   9   2022    18
1   10  2022    16
1   11  2022    2
1   12  2022    3
1   13  2022    24
1   14  2022    13
1   15  2022    4
1   16  2022    9
1   17  2022    2
1   18  2022    0
1   19  2022    22
1   20  2022    14
1   21  2022    14
1   22  2022    18
1   23  2022    22
1   24  2022    18
1   25  2022    5
1   26  2022    23
1   27  2022    13
1   28  2022    11
1   29  2022    7
1   30  2022    24
1   31  2022    15
2   1   2022    20
2   2   2022    19
2   3   2022    5
2   4   2022    5
2   5   2022    15
2   6   2022    8
2   7   2022    2
2   8   2022    20
2   9   2022    10
2   10  2022    12
2   11  2022    1
2   12  2022    20
2   13  2022    2
2   14  2022    7
2   15  2022    21
2   16  2022    5
2   17  2022    10
2   18  2022    9
2   19  2022    4
2   20  2022    13
2   21  2022    15
2   22  2022    25
2   23  2022    22
2   24  2022    14
2   25  2022    2
2   26  2022    12
2   27  2022    15
2   28  2022    19

期望最终结果

Month Year Last 14-day Rolling Mean
1     2022      13.86666667
2     2022      12.86666667

实现代码

import pandas as pd

# 加载你的数据(如果是从文件读取,替换为pd.read_csv("your_file_path.csv"))
# 这里用样例数据演示
data = {
    'Month': [1]*31 + [2]*28,
    'Day': list(range(1,32)) + list(range(1,29)),
    'Year': [2022]*31 + [2022]*28,
    'Var1': [8,8,17,1,10,21,9,18,18,16,2,3,24,13,4,9,2,0,22,14,14,18,22,18,5,23,13,11,7,24,15,
             20,19,5,5,15,8,2,20,10,12,1,20,2,7,21,5,10,9,4,13,15,25,22,14,2,12,15,19]
}
df = pd.DataFrame(data)

# 1. 创建完整日期列并确保数据按日期排序
df['Date'] = pd.to_datetime(df[['Year', 'Month', 'Day']])
df = df.sort_values('Date').reset_index(drop=True)

# 2. 按年-月分组,计算每组内Var1的向前滚动均值(窗口14天,不足14天则用现有数据)
df['Daily Rolling Mean'] = df.groupby(['Year', 'Month'])['Var1'].transform(
    lambda x: x.rolling(window=14, min_periods=1).mean()
)

# 3. 提取每个月最后一行数据,整理为最终格式
final_df = df.groupby(['Year', 'Month'], as_index=False).last()[['Month', 'Year', 'Daily Rolling Mean']]
final_df = final_df.rename(columns={'Daily Rolling Mean': 'Last 14-day Rolling Mean'})

# 查看结果
print(final_df)

代码说明

  • 创建日期列:将Year、Month、Day合并为标准日期格式,确保数据按时间顺序排列,避免滚动计算出错。
  • 分组计算滚动均值:通过groupby(['Year', 'Month'])确保只在每个月内部计算滚动均值,rolling(window=14, min_periods=1)表示使用14天窗口,数据不足14天时仍计算均值。
  • 提取月末结果:通过groupby(...).last()获取每个月最后一天的数据,重命名列后得到最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 13:09:55