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

如何基于Datetime范围为Pandas DataFrame分配标签列值?

问题描述

我有一个字典,键为标签,值是包含起始和结束Datetime的列表:

d = {'A': [2020-01-01 00:00:00+00:00, 2024-01-24 00:00:00+00:00]}

我有一个含time列的DataFrame,希望当time列的Datetime落在字典对应标签的时间范围内时,为其分配该标签,处理后示例如下:

ID  time                       Label
1   2024-01-23 00:00:00+00:00  A

处理纯日期时我使用以下代码:

for k, (s, e) in d.items():
    df.loc[df["time"].isin(pd.date_range(s, e)), 'Label'] = k

但pd.date_range函数不适用于Datetime范围匹配,请问如何修改代码以适配时间范围而非日期范围?

解决方案

不需要生成完整的时间序列来匹配,直接通过布尔条件判断时间是否落在目标区间内即可,这种方法既支持带时区的Datetime,也更高效。

修改后的代码示例:

import pandas as pd

# 初始化字典与DataFrame(确保时间为pd.Timestamp类型)
d = {'A': [pd.Timestamp('2020-01-01 00:00:00+00:00'), pd.Timestamp('2024-01-24 00:00:00+00:00')]}
df = pd.DataFrame({'ID': [1], 'time': [pd.Timestamp('2024-01-23 00:00:00+00:00')]})

for label, (start_time, end_time) in d.items():
    # 直接判断time列的值是否在[start_time, end_time]区间内
    df.loc[(df['time'] >= start_time) & (df['time'] <= end_time), 'Label'] = label

关键说明

  • 确保字典中的起始/结束时间为pd.Timestamp类型,如果原始数据是字符串,可通过pd.to_datetime()转换
  • 若存在多标签时间区间重叠的情况,后执行的标签会覆盖先执行的结果,如需自定义优先级可调整循环顺序或添加额外判断逻辑
  • 此方法避免了生成海量时间点,在处理大数据集时性能优势明显

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:01:05