如何对Pandas DataFrame按1小时窗口重采样并求和value列?
解决方案
步骤说明
要实现按1小时窗口分组并对value字段求和,需完成以下操作:
- 将
date_and_time列转换为datetime类型,让Pandas能识别时间格式。 - 以时间列作为索引(或生成小时级分组键),通过
resample或groupby完成小时级聚合。 - 对每个小时窗口内的
value求和,得到最终结果。
代码实现
方法一:使用resample(适用于时间序列场景)
import pandas as pd # 构造示例数据 data = { 'index': [103819, 103820, 103821, 103822, 103823, 103824, 103825, 103826, 103827, 103828], 'date_and_time': ['2023-12-31 16:34:17', '2023-12-31 16:34:41', '2023-12-31 16:37:29', '2023-12-31 16:39:33', '2023-12-31 16:39:59', '2023-12-31 16:40:40', '2023-12-31 16:41:36', '2023-12-31 16:42:56', '2023-12-31 16:43:24', '2023-12-31 16:43:56'], 'value': [1]*10 } df = pd.DataFrame(data) # 转换时间列格式 df['date_and_time'] = pd.to_datetime(df['date_and_time']) # 设置时间列为索引 df = df.set_index('date_and_time') # 按小时重采样并求和 hourly_result = df['value'].resample('H').sum() # 可选:重置索引,将时间转为列(匹配期望输出格式) hourly_result = hourly_result.reset_index().rename(columns={'date_and_time': 'date_and_time', 'value': 'value'}) print(hourly_result)
方法二:使用groupby结合时间向下取整
# 转换时间列格式 df['date_and_time'] = pd.to_datetime(df['date_and_time']) # 生成小时级分组键(将时间向下取整到小时) df['hour_window'] = df['date_and_time'].dt.floor('H') # 按小时窗口分组求和 hourly_result = df.groupby('hour_window')['value'].sum().reset_index().rename(columns={'hour_window': 'date_and_time'}) print(hourly_result)
输出说明
运行代码后会得到按小时聚合的结果。针对你提供的示例数据,16:00-17:00窗口内的value总和为10;若有后续时段的数据,会自动按小时分组求和,格式与你期望的输出一致。
内容的提问来源于stack exchange,提问作者Emil Frlez
相关产品推荐
相关产品推荐

