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

基于DataFrame日期时间列生成分类列的Python实现方案

基于DataFrame日期时间列生成分类列的Python实现方案

嘿,我来帮你搞定这个根据时间区间生成分类列的需求!首先结合你给出的示例,先明确匹配规则(确保结果和示例完全对齐):

  • ON:当天16:00到次日09:00(含16:00,不含09:00)
  • FH:09:00到10:00(含09:00,不含10:00)
  • M:10:00到15:00(含10:00,不含15:00)
  • SLH:15:00到15:30(含15:00,不含15:30)
  • LH:15:30到16:00(含15:30,不含16:00)

下面是具体的实现代码,用pandas和numpy就能轻松完成:

import pandas as pd
import numpy as np

# 生成你提供的示例DataFrame
date_rng = pd.date_range(start='2024-01-01', periods=48, freq='30min')  
d = pd.DataFrame({'datetime': date_rng})

# 把时间转换成便于比较的数值:小时 + 分钟/60,比如09:30就是9.5,16:00就是16.0
d['time_num'] = d['datetime'].dt.hour + d['datetime'].dt.minute / 60

# 定义匹配条件和对应的标签
conditions = [
    # ON区间:16:00及之后,或者09:00之前
    (d['time_num'] >= 16.0) | (d['time_num'] < 9.0),
    # FH区间:09:00到10:00
    (d['time_num'] >= 9.0) & (d['time_num'] < 10.0),
    # M区间:10:00到15:00
    (d['time_num'] >= 10.0) & (d['time_num'] < 15.0),
    # SLH区间:15:00到15:30
    (d['time_num'] >= 15.0) & (d['time_num'] < 15.5),
    # LH区间:15:30到16:00
    (d['time_num'] >= 15.5) & (d['time_num'] < 16.0)
]

labels = ['ON', 'FH', 'M', 'SLH', 'LH']

# 生成分类列'part'
d['part'] = np.select(conditions, labels)

# 查看结果(和你给出的示例完全一致)
print(d.head(40))

代码小说明:

  1. 时间数值化:把datetime的小时和分钟转换成连续数值,避开直接处理时间字符串的麻烦,区间判断更直观。
  2. 多条件匹配:用np.select处理多区间逻辑,清晰易懂,跨天的ON区间只需要用|(或)逻辑就能轻松覆盖。
  3. 灵活调整:如果之后要修改区间边界,直接调整conditions里的数值就行,比如想把FH的起始时间改成09:30,只需要把第二个条件改成(d['time_num'] >=9.5) & (d['time_num'] <10.0)即可。

运行这段代码后,生成的part列就会和你给出的示例完全一致啦!

备注:内容来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 10:55:29