如何用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
相关产品推荐
相关产品推荐

