Pandas结合datetime按指定时间范围统计DataFrame的inter列总和
实现方案
步骤1:字段类型转换
先把原数据的字符串类型字段转换为Pandas支持的时间类型,方便后续计算:
import pandas as pd # 合并日期+起始时间为完整时间戳,可调整format参数匹配你的实际日期格式 df['start_full'] = pd.to_datetime(df['date'] + ' ' + df['start'], format='%d-%m-%Y %H:%M:%S') # 将inter字段转换为时间差类型 df['inter'] = pd.to_timedelta(df['inter'])
步骤2:生成小时区间标签
根据每条记录的起始时间,匹配所属的小时区间:
# 提取日期作为输出的new_date字段 df['new_date'] = df['start_full'].dt.strftime('%d-%m-%Y') # 生成小时区间的起始时间,例:10:01:24对应的起始区间为10:00:00 df['start_range'] = df['start_full'].dt.floor('H').dt.strftime('%H:%M:%S') # 生成小时区间的结束时间,例:10点区间的结束为10:59:59 df['end_range'] = (df['start_full'].dt.floor('H') + pd.Timedelta(hours=1) - pd.Timedelta(seconds=1)).dt.strftime('%H:%M:%S')
步骤3:分组求和得到结果
按日期、小时区间分组,对inter字段求和得到最终结果:
result_df = df.groupby( ['new_date', 'start_range', 'end_range'], as_index=False )['inter'].sum().rename(columns={'inter': 'inter_sum'})
特殊场景适配
如果你的统计规则要求整条记录的起止时间完全落在区间内才计入求和,可在分组前增加如下过滤逻辑:
# 生成完整的结束时间戳 df['end_full'] = pd.to_datetime(df['date'] + ' ' + df['end'], format='%d-%m-%Y %H:%M:%S') # 计算当前小时区间的结束时间 df['hour_end'] = df['start_full'].dt.floor('H') + pd.Timedelta(hours=1) - pd.Timedelta(seconds=1) # 过滤出完全落在当前小时区间内的记录 df = df[df['end_full'] <= df['hour_end']]
内容的提问来源于stack exchange,提问作者user6634965
相关产品推荐
相关产品推荐

