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

如何用Python对20年3小时间隔的时间序列DataFrame按日周年求均值?

解决时间序列日/周/年均值计算问题

嗨,作为刚接触时间序列的新手,你已经找对方向了——resample确实是处理这类频率转换的核心工具,不过你的代码里有几个小问题需要调整,咱们一步步来搞定:

第一步:先把时间列转成datetime类型并设置为索引

首先,确保你的Time_stamp列是pandas能识别的datetime格式,这是时间序列操作的前提。然后直接把它设为DataFrame的索引,不用手动提取日期,pandas会自动处理:

import pandas as pd

# 假设你的原始数据已经存在df里(比如通过pd.read_csv读取)
# 先转换时间列类型
df['Time_stamp'] = pd.to_datetime(df['Time_stamp'])
# 设置时间索引
df.set_index('Time_stamp', inplace=True)

第二步:用resample计算不同频率的均值

resample就像一个"时间分组器",你指定频率,它会自动把数据按时间分组,然后计算聚合值。注意新版本pandas已经弃用了how参数,直接用.mean()或者.agg()来指定聚合函数就行:

1. 计算日均值(每天8个3小时样本的平均)

# 生成独立的日均值DataFrame
daily_mean = df['X'].resample('D').mean().reset_index()
daily_mean.columns = ['Date', 'Daily_Average_X']  # 重命名列更直观

这里的'D'代表按日历日分组,.mean()会自动计算每个分组里X的平均值。

2. 计算周均值

# 'W'代表按周分组,默认每周日为周末,如果你想改周一为周末可以用'W-MON'
weekly_mean = df['X'].resample('W').mean().reset_index()
weekly_mean.columns = ['Week_End_Date', 'Weekly_Average_X']

3. 计算年均值

# 'Y'代表按年份分组,默认每年12月31日为年末
yearly_mean = df['X'].resample('Y').mean().reset_index()
yearly_mean.columns = ['Year_End_Date', 'Yearly_Average_X']

解释你之前代码的问题

  • 变量名混乱:你混用了datasets和df,导致lambda里的引用错误;
  • 手动提取日期没必要:pandas的时间索引可以直接被resample识别,不用额外生成date_minus_time列;
  • resample的how参数已弃用:现在直接链式调用聚合方法(比如.mean())更规范;
  • 你用了df['count'],但你的数据里只有X列,这是笔误。

额外小提示

  • 如果你的数据有缺失的3小时样本,可以在resample时用.mean(skipna=True)(默认就是True),或者用.fillna()先补全缺失值;
  • 可以用resample的closed和label参数调整分组的边界(比如日均值是按00:00-23:59还是前一天的21:00到当天的18:00),不过默认设置对你的场景已经够用。

现在你就有三个独立的DataFrame,分别存储了日、周、年的X字段平均值啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:45:09