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

如何在Pandas中对DataFrame的时间值进行区间分类?

解决时间值的分箱分类问题

这问题我碰到过,pd.cut确实只认数值型数据,直接扔时间字符串肯定行不通,不过咱们先把时间转换成可计算的数值再处理,几步就能搞定,看下面的操作:

步骤1:正确创建并预处理时间DataFrame

你原来的DataFrame创建代码有小问题,时间值得用字符串包裹,而且最好先转成时间格式,方便后续提取关键数值:

import pandas as pd

# 正确构建初始DataFrame
df = pd.DataFrame(['02:00:00', '04:00:00', '07:00:00'], columns=['time'])
# 将字符串时间转换为datetime类型
df['time'] = pd.to_datetime(df['time'], format='%H:%M:%S')
# 提取小时数作为分箱用的数值列
df['hour'] = df['time'].dt.hour

步骤2:自定义分箱区间与对应标签

根据你的需求,咱们手动定义区间范围和对应的时间段标签:

# 分箱区间(左闭右开逻辑,最后一个区间用24覆盖当天剩余时间)
bins = [0, 2, 4, 7, 24]
# 对应每个区间的可读性标签
labels = ['0am-2am', '2am-4am', '4am-7am', '7am-12pm']

步骤3:用pd.cut完成分类映射

现在就可以用pd.cut把小时数映射到对应的时间段类别了:

df['time_category'] = pd.cut(df['hour'], bins=bins, labels=labels, include_lowest=True)
  • include_lowest=True 是为了让第一个区间包含0点的时间(比如00:00:00会被分到0am-2am)
  • 如果需要调整时间区间,直接修改bins和labels就行,比如想分更细的时段,加对应的数值和标签就好。

最终结果示例

运行完上面的代码,你的DataFrame会变成这样:

time  hour time_category
0 1900-01-01 02:00:00     2        2am-4am
1 1900-01-01 04:00:00     4        4am-7am
2 1900-01-01 07:00:00     7      7am-12pm

补充小技巧

如果不想单独提取小时列,也可以直接把时间转换成一天内的总秒数来做分箱,原理完全一致:

df['total_seconds'] = df['time'].dt.hour * 3600 + df['time'].dt.minute * 60 + df['time'].dt.second
# 对应的bins要转换成秒数,比如2小时=7200秒,4小时=14400秒
bins_seconds = [0, 7200, 14400, 25200, 86400]
df['time_category'] = pd.cut(df['total_seconds'], bins=bins_seconds, labels=labels, include_lowest=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:07:40