如何在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
相关产品推荐
相关产品推荐

