如何使用Pandas按小时聚合数据并显示对应日期而非索引?
Pandas按小时聚合并保留完整日期时间索引的解决方案
你现在的问题核心是:用data.index.hour分组时只提取了小时数值,导致丢失了日期上下文。其实Pandas有两种非常简便的方式可以实现你想要的「保留完整小时级日期时间作为索引」的需求:
方法一:使用resample(时间序列聚合首选)
resample是Pandas专门为时间序列数据打造的聚合工具,直接指定'H'(小时)作为频率,就能自动按小时分组,同时保留完整的日期时间索引:
import pandas as pd import numpy as np dates = pd.date_range('1/1/2011', periods=20, freq='25min') data = pd.Series(np.random.randint(100, size=20), index=dates) # 按小时重采样并求和 result = data.resample('H').sum().reset_index(name='Sum') print(result)
执行后输出的index列就是每个小时的起始完整日期时间(例如2011-01-01 00:00:00、2011-01-01 01:00:00),完全匹配你的期望输出。
方法二:使用groupby配合floor('H')
如果你更习惯用groupby语法,可以将时间索引向下取整到小时级别,以此作为分组键,这样聚合后就能得到带完整日期的小时索引:
# 按向下取整到小时的索引分组求和 result = data.groupby(data.index.floor('H')).sum().reset_index(name='Sum') print(result)
这里的floor('H')会把每个时间戳调整到当前小时的起始时刻(比如2011-01-01 00:25:00会被转换为2011-01-01 00:00:00),以此作为分组依据,完美保留了日期信息。
两种方法的小区别
resample更适合规则频率的时间聚合,语法更简洁直观,是时间序列聚合的首选;groupby + floor灵活性更高,如果后续需要自定义时间截断规则(比如按30分钟、按每天的特定时段),这种方式更容易扩展。
内容的提问来源于stack exchange,提问作者IceVortex
相关产品推荐
相关产品推荐

