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

如何在Pandas中对DataFrame的时间段列进行时段分类?

解决Pandas DataFrame时段划分问题

没问题,这事儿其实挺简单的,咱们一步步来搞定它。首先得先明确四个时段的划分标准(毕竟不同场景下定义可能略有差异,我先给个通用的,你可以根据需求灵活调整):

  • 早晨:6:00AM - 11:59AM
  • 下午:12:00PM - 5:59PM
  • 傍晚:6:00PM - 9:59PM
  • 夜晚:10:00PM - 5:59AM

完整解决方案代码

先给你看完整的可运行代码,后面再拆解开讲每个步骤:

import pandas as pd

# 模拟你的数据(替换成你实际的DataFrame即可)
data = {'TIME': ['1:00AM to 2:00AM', '7:00AM to 8:00AM', '1:00PM to 2:00PM', 
                 '7:00PM to 8:00PM', '11:00PM to 12:00AM', '5:30AM to 6:30AM']}
df = pd.DataFrame(data)

# 步骤1:从TIME列提取起始时间
df['Start_Time'] = df['TIME'].str.split(' to ', expand=True)[0]

# 步骤2:把时间字符串转换成datetime格式,方便提取24小时制小时数
df['Start_Time_DT'] = pd.to_datetime(df['Start_Time'], format='%I:%M%p')
df['Hour_24'] = df['Start_Time_DT'].dt.hour

# 步骤3:定义时段映射逻辑,生成Time_Shift列
def assign_time_shift(hour):
    if 6 <= hour < 12:
        return '早晨'
    elif 12 <= hour < 18:
        return '下午'
    elif 18 <= hour < 22:
        return '傍晚'
    else:
        return '夜晚'

df['Time_Shift'] = df['Hour_24'].apply(assign_time_shift)

# 查看最终结果(只保留关键列)
print(df[['TIME', 'Time_Shift']])

运行后会得到这样的输出:

TIME Time_Shift
0   1:00AM to 2:00AM        夜晚
1   7:00AM to 8:00AM        早晨
2   1:00PM to 2:00PM        下午
3   7:00PM to 8:00PM        傍晚
4  11:00PM to 12:00AM       夜晚
5   5:30AM to 6:30AM        夜晚

步骤拆解说明

  1. 提取起始时间:
    你的TIME列是「X to Y」的格式,我们用str.split把起始时间拆出来——因为时间段是连续的,用起始时间来判断所属时段已经足够准确(如果你的业务需要考虑跨时段的情况,比如5:30AM到6:30AM,也可以根据结束时间或者时段占比调整,不过大部分场景下起始时间就够用)。

  2. 转换时间格式:
    用pd.to_datetime把字符串时间转换成Pandas的datetime对象,指定format='%I:%M%p'来匹配「1:00AM」这种格式(%I是12小时制的小时,%p是AM/PM标识),然后提取24小时制的小时数,方便后续判断。

  3. 映射时段:
    写一个简单的函数,根据24小时制的小时数返回对应的时段标签,再用apply把函数应用到整个Hour_24列上,生成Time_Shift列。

可选简化方案:用pd.cut替代函数

如果你觉得写函数麻烦,也可以用pd.cut来快速分段,代码更简洁:

# 定义分段区间和对应标签
bins = [-1, 6, 12, 18, 22, 24]
labels = ['夜晚', '早晨', '下午', '傍晚', '夜晚']

# 直接生成Time_Shift列
df['Time_Shift'] = pd.cut(df['Hour_24'], bins=bins, labels=labels, include_lowest=True)

这个效果和上面的函数完全一致,适合快速实现。

自定义调整提示

如果你的时段划分标准不一样(比如把早晨定义为7点开始,傍晚到11点结束),只需要修改函数里的数值或者bins的区间就行,非常灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:48:31