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

基于Pandas将DataFrame中15分钟间隔的DateTime统计值按小时分组

Pandas将15分钟间隔的统计值按小时分组方案

嘿,刚好碰到过类似需求,给你两个靠谱的方案,完全符合日期逻辑,绝对不会只取每个小时的首个值!

首先咱们得明确核心:把每小时内的4个15分钟统计值(如果数据完整的话)做合理聚合,比如求和、均值等,而不是只拿第一个值。下面用示例代码一步步演示:

1. 先准备示例数据

假设你的DataFrame有timestamp(日期时间列)和count(统计值列),先构造一个模拟数据集:

import pandas as pd
import numpy as np

# 生成2小时的15分钟间隔数据
timestamps = pd.date_range(start='2024-05-20 08:00:00', periods=8, freq='15min')
df = pd.DataFrame({
    'timestamp': timestamps,
    'count': np.random.randint(10, 50, size=8)
})

2. 方案一:用resample(时间序列专用,推荐)

resample是Pandas专门为时间序列分组设计的工具,用法简洁且逻辑清晰:

# 第一步:将日期时间列设为索引(resample要求时间类型的索引)
df.set_index('timestamp', inplace=True)

# 第二步:按小时聚合,这里用sum()求和,你也可以换成mean()/max()等
hourly_df = df.resample('H').sum()

# 可选:把时间索引转回普通列
hourly_df.reset_index(inplace=True)

解释:resample('H')会自动把所有属于同一小时的15分钟数据归为一组,sum()则把组内的count累加起来——完全符合日期逻辑,不会出现只取首个值的问题。

3. 方案二:用groupby结合dt.floor

如果不想修改索引,也可以用groupby配合时间向下取整来实现:

# 第一步:给DataFrame新增一列,把每个时间戳向下取整到对应小时
df['hour_group'] = df['timestamp'].dt.floor('H')

# 第二步:按新增的小时分组列聚合count
hourly_df = df.groupby('hour_group')['count'].sum().reset_index()

解释:dt.floor('H')会把8:15、8:30、8:45这类时间统一转为8:00,这样同一天同一小时的所有数据都会被分到同一组,再通过聚合函数处理组内数据。

注意事项

  • 确保你的timestamp列是datetime类型,如果不是,先执行df['timestamp'] = pd.to_datetime(df['timestamp'])转换。
  • 聚合函数可以根据业务需求替换:比如求每小时的平均统计值用mean(),求最大值用max(),但绝对不要用first()(这就是你说的“累加首个值”的错误方案)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:16:36