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

如何在Pandas中按小时区间分组并补全缺失小时的数据?

按小时区间分组DataFrame并填充缺失区间

先看你的DataFrame结构:

import pandas as pd

df = pd.DataFrame({
    'hour': ['6:48', '4:02', '12:52', '2:14', '6:45'],
    'calls': [4, 21, 31, 32, 13],
    'received': [2, 3, 7, 5, 3],
    'appointment': [2, 2, 4, 2, 2]
})

其中hour列为字符串类型,需求是按1-2、2-3这类连续小时区间分组求和,且无数据的区间用0填充。

你直接按原hour列分组的思路不适用,因为原列是具体时间点而非区间,正确处理步骤如下:

步骤1:生成小时区间标签

从hour字符串中提取小时数,构造对应的区间标识:

# 提取小时数并转为整数
df['hour_num'] = df['hour'].str.split(':').str[0].astype(int)
# 生成区间标签,例如2点的时间对应"2-3"
df['hour_interval'] = df['hour_num'].apply(lambda x: f"{x}-{x+1}")

步骤2:按区间分组求和

grouped = df.groupby('hour_interval')[['calls', 'received', 'appointment']].sum().reset_index()

步骤3:生成完整区间并填充0

先创建包含0-1到23-24所有区间的基础DataFrame,再与分组结果合并,缺失值用0填充:

# 生成全天24个小时区间
all_intervals = pd.DataFrame({
    'hour_interval': [f"{i}-{i+1}" for i in range(24)]
})
# 合并数据并填充0,转为整数类型
result = all_intervals.merge(grouped, on='hour_interval', how='left').fillna(0).astype(int)
# 调整列名和顺序
result = result.rename(columns={'hour_interval': 'hour'})[['hour', 'calls', 'received', 'appointment']]

最终结果会和你期望的一致,所有无数据的区间都会用0填充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:57:17