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

在Pandas DataFrame中统计起止时间范围内的小时并按值分组

实现步骤

我们可以通过时间格式转换、整点序列生成、频次统计三个核心步骤完成需求,具体代码和逻辑如下:

1. 导入库并构造初始数据

import pandas as pd

# 构造你的原始数据
data = {
    'start_time': ['10:00:00', '13:00:00', '12:00:00', '13:00:00', '11:00:00', '09:00:00'],
    'end_time': ['14:00:00', '20:00:00', '15:00:00', '19:00:00', '15:00:00', '14:00:00']
}
df = pd.DataFrame(data)

2. 转换时间列类型

将字符串格式的时间转为datetime类型,方便后续时间运算:

df['start_time'] = pd.to_datetime(df['start_time'], format='%H:%M:%S')
df['end_time'] = pd.to_datetime(df['end_time'], format='%H:%M:%S')

3. 生成每行的整点序列

定义函数,对每行生成包含起始时间、不包含结束时间的所有整点:

def extract_hours(row):
    # closed='left' 表示包含start_time,排除end_time
    return pd.date_range(start=row['start_time'], end=row['end_time'], freq='H', closed='left').time

# 应用函数到每行,得到该行的整点列表
df['hour_list'] = df.apply(extract_hours, axis=1)

4. 统计整点出现次数

将所有整点数据展开后,统计每个整点的出现频次,最后整理成目标格式:

# 展开所有整点数据,把列表拆成单行
all_hours = df['hour_list'].explode()

# 统计频次并重置索引
result_df = all_hours.value_counts().reset_index()
# 修改列名匹配需求
result_df.columns = ['time', 'count']

# 将时间格式转回字符串(与示例格式一致)
result_df['time'] = result_df['time'].astype(str)

# 按时间排序(可选,根据需求调整)
result_df = result_df.sort_values('time').reset_index(drop=True)

最终说明

运行上述代码后,result_df即为统计结果。注:你提供的示例结果存在数据误差,实际按原始数据统计时,13:00:00会出现在全部6行的时段中,对应count应为6。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:12:53