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

如何使用Pandas将15分钟间隔的发电机发电数据转换为小时级平均值数据

解决15分钟间隔数据转小时级均值的问题

刚好你提到的用Pandas处理这个需求非常合适,我推荐用resample方法(专门针对时间序列的重采样工具),比groupby更直观且适配时间场景,下面一步步给你演示:

步骤1:准备数据并处理时间格式

首先我们把你的示例数据导入Pandas,并且将Time列转换成datetime类型(这是时间序列处理的基础):

import pandas as pd

# 你的示例数据
data = {
    'Time': ['00:15:00', '00:30:00', '00:45:00', '01:00:00',
             '01:15:00', '01:30:00', '01:45:00', '02:00:00'],
    'Gen1': [10, 12, 16, 20, 60, 30, 70, 40],
    'Gen2': [21, 22, 26, 11, 51, 31, 21, 61]
}

df = pd.DataFrame(data)

# 将Time列转为datetime格式
df['Time'] = pd.to_datetime(df['Time'], format='%H:%M:%S')

步骤2:用resample生成小时级均值

这里关键是用resample('H')按小时分组,再加上label='right'参数——这个参数会让每个分组的标签用区间的结束时间(比如00:15-01:00的区间,标签显示为01:00:00),正好匹配你的预期输出:

# 设置Time列为索引,方便resample操作
df = df.set_index('Time')

# 按小时重采样,取均值,并用区间右边界作为时间标签
hourly_avg = df.resample('H', label='right').mean()

# 重置索引,并把时间格式转回HH:MM:SS的字符串
hourly_avg = hourly_avg.reset_index()
hourly_avg['Time'] = hourly_avg['Time'].dt.strftime('%H:%M:%S')

步骤3:查看结果

运行完上面的代码后,打印hourly_avg就能得到你想要的结果:

print(hourly_avg)

输出结果:

Time  Gen1  Gen2
0  01:00:00  14.5  20.0
1  02:00:00  50.0  41.0

补充:用groupby的实现方式(备选)

如果你一定要用groupby的话,可以提取每个时间对应的结束小时,再分组求均值:

# 回到原始的df(未设置索引的版本)
df['end_hour'] = df['Time'].dt.hour + 1  # 计算每个15分钟区间所属的结束小时
hourly_avg_groupby = df.groupby('end_hour').mean().reset_index()

# 格式化时间列
hourly_avg_groupby['Time'] = hourly_avg_groupby['end_hour'].apply(lambda x: f"{x:02d}:00:00")

# 调整列顺序,匹配预期输出
hourly_avg_groupby = hourly_avg_groupby[['Time', 'Gen1', 'Gen2']]

不过这种方式在数据跨天的时候会有问题(比如23:15的结束小时是0,需要额外处理日期),所以还是更推荐resample的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 03:32:35