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

如何将30分钟间隔的Pandas数据转换为小时级数据?

将30分钟间隔的Pandas数据集转换为小时级数据

需求说明

给定包含id、date、val字段的Pandas DataFrame(时间间隔30分钟),需按以下规则转换为小时级数据:

  • 同一id、同一小时内的多条数据:对val求和,保留该小时的第一个时间点
  • 整点时间且无同小时其他数据:直接保留该条数据
  • 跨日期的数据需按日期分别处理

示例输入数据

import pandas as pd
df = pd.DataFrame()
df['id'] = [1, 1, 2, 2, 3,3,3,3,4,4,4,4,4,4]
df['date'] = [
    '2012-02-10 8:00:00',
    '2012-02-10 8:30:00',
    '2012-02-10 8:00:00',
    '2012-02-10 9:00:00',
    '2012-02-10 8:00:00',
    '2012-02-10 8:30:00',
    '2012-02-10 9:00:00',
    '2012-02-11 9:30:00',
    '2012-02-11 9:00:00',
    '2012-02-11 9:30:00',
    '2012-02-11 10:00:00',
    '2012-02-11 11:00:00',
    '2012-02-11 11:30:00',
    '2012-02-11 12:00:00'
]
df['val'] = [10,10,2,2,3,3,4,5,1,2,3,4,5,6]

期望输出

id      date                  val
1       2012-02-10 08:00:00   20
2       2012-02-10 08:00:00   2
2       2012-02-10 09:00:00   2
3       2012-02-10 08:00:00   6
3       2012-02-10 09:00:00   4
3       2012-02-11 09:30:00   5
4       2012-02-11 09:00:00   3
4       2012-02-11 10:00:00   3
4       2012-02-11 11:00:00   9
4       2012-02-11 12:00:00   6

解决方案代码

# 1. 清理并转换时间字段
df['date'] = df['date'].str.replace('\s+', ' ', regex=True).str.strip()
df['date'] = pd.to_datetime(df['date'])

# 2. 构造分组键:确保按id、日期、小时分组(跨日期的同一小时分开处理)
df['group_date'] = df['date'].dt.date
df['group_hour'] = df['date'].dt.hour

# 3. 分组聚合:求和val,保留每组第一个时间点
result_df = df.groupby(['id', 'group_date', 'group_hour'], as_index=False).agg(
    date=('date', 'first'),
    val=('val', 'sum')
)

# 4. 整理结果列,移除辅助分组列
result_df = result_df[['id', 'date', 'val']]

# 查看结果
print(result_df.to_string(index=False))

代码说明

  • 时间字段预处理:先清理字符串中的多余空格和换行,再转换为datetime类型,确保后续时间操作准确
  • 分组逻辑:通过id+日期+小时的组合键分组,严格区分跨日期的同一小时数据
  • 聚合操作:对每个分组的val求和,同时取分组内第一个date作为保留的时间点,完全符合需求规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:12:30