如何将2015年15分钟间隔数据转换为小时级汇总数据?
刚好做过类似的时间粒度转换需求,给你整理几种不同工具下的实现方式,按需选用就行:
方法一:Python Pandas(数据分析场景首选)
如果你的数据是用Python处理的,Pandas的重采样功能可以轻松搞定:
import pandas as pd # 假设你的数据存储在DataFrame中,时间列名为'timestamp',需要聚合的数值列名为'value' # 第一步:确保时间列是datetime类型 df['timestamp'] = pd.to_datetime(df['timestamp']) # 将时间列设为索引(可选,但重采样更直观) df.set_index('timestamp', inplace=True) # 按小时重采样并求和,每个小时的起始时间会作为新的时间戳 hourly_aggregated = df.resample('H').sum() # 如果需要把时间索引变回普通列,执行下面这行 hourly_aggregated.reset_index(inplace=True)
小提示:如果原始数据存在缺失的15分钟记录(比如某小时少了一个时间点),sum()会自动跳过NaN值;如果需要把缺失值当作0计算,可以先执行df.fillna(0, inplace=True)。
方法二:SQL(数据存储在数据库时使用)
如果你的15分钟数据存在数据库中,可以通过分组聚合实现。以下是通用SQL示例,不同数据库的时间截断函数略有差异:
SELECT DATE_TRUNC('hour', record_time) AS hour_start_time, SUM(metric_value) AS hourly_total FROM your_table_name WHERE record_time BETWEEN '2015-01-01 00:00:00' AND '2015-12-31 23:59:59' GROUP BY DATE_TRUNC('hour', record_time) ORDER BY hour_start_time;
数据库适配说明:
- MySQL:用
DATE_FORMAT(record_time, '%Y-%m-%d %H:00:00')替代DATE_TRUNC('hour', record_time) - Oracle:用
TRUNC(record_time, 'HH')替代 - SQL Server:用
DATEADD(hour, DATEDIFF(hour, 0, record_time), 0)替代
方法三:Excel(非编程场景适用)
如果不想写代码,用Excel也能快速完成转换:
- 第一步:确认原始时间列是Excel可识别的日期时间格式(如果不是,选中列后在「数据」选项卡选择「分列」转换)
- 第二步:添加辅助列,命名为「小时级时间」,在单元格中输入公式
=FLOOR(A2, "0:60")(A2是原始时间所在单元格),下拉填充整列——这个公式会把时间向下取整到最近的小时 - 第三步:插入数据透视表,将「小时级时间」拖到「行」区域,需要聚合的数值列拖到「值」区域,然后把值的汇总方式设置为「求和」
- 第四步:筛选透视表的时间范围,只保留2015年的数据即可
内容的提问来源于stack exchange,提问作者junmouse
相关产品推荐
相关产品推荐

