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

如何用pandas重采样时间序列DataFrame获取全年各小时平均数据?

解决Pandas按小时聚合全年同一时段均值的问题

你当前使用df.Value.resample('H').mean()得到的是每日每个小时的单独均值,但要实现「所有日期中同一小时的整体平均值」,可以通过以下两种简洁方法完成:

方法1:直接按小时字段分组聚合

这是最直接的方式,通过提取时间的小时部分作为分组键,直接计算所有同小时数据的均值:

情况A:时间列为DataFrame的索引

import pandas as pd

# 提取索引的小时作为分组依据,计算均值
hourly_overall_mean = df['Value'].groupby(df.index.hour).mean()

# 将小时索引格式化为 HH:MM:SS 形式
hourly_overall_mean.index = hourly_overall_mean.index.map(lambda h: f"{h:02d}:00:00")

# 重置索引并整理列名
hourly_overall_mean = hourly_overall_mean.reset_index().rename(columns={
    'index': '时间日期',
    'Value': '数值'
})

情况B:时间为普通列(如列名为「时间日期」)

import pandas as pd

# 确保时间列是datetime类型(若未转换)
df['时间日期'] = pd.to_datetime(df['时间日期'])

# 按时间列的小时部分分组,计算均值
hourly_overall_mean = df.groupby(df['时间日期'].dt.hour)['Value'].mean()

# 格式化索引为时间字符串
hourly_overall_mean.index = hourly_overall_mean.index.map(lambda h: f"{h:02d}:00:00")

# 重置索引并整理列名
hourly_overall_mean = hourly_overall_mean.reset_index().rename(columns={
    '时间日期': '时间日期',
    'Value': '数值'
})

方法2:基于resample结果二次聚合

如果已经有了按小时重采样后的每日小时均值,可以在此基础上再次按小时分组,计算全年同小时的整体均值:

import pandas as pd

# 先得到每日各小时的均值
daily_hourly_means = df['Value'].resample('H').mean()

# 按小时部分分组,计算全年同小时的整体均值
hourly_overall_mean = daily_hourly_means.groupby(daily_hourly_means.index.hour).mean()

# 格式化索引并整理列名
hourly_overall_mean.index = hourly_overall_mean.index.map(lambda h: f"{h:02d}:00:00")
hourly_overall_mean = hourly_overall_mean.reset_index().rename(columns={
    'index': '时间日期',
    'Value': '数值'
})

最终输出示例

执行上述代码后,你会得到符合预期的结果:

时间日期数值
00:00:0055
01:00:0024

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:15:36