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

如何基于Pandas中Datetime索引的小时值设置DataFrame列值

根据Datetime索引的小时值设置DataFrame列值

首先帮你修正现有代码里的小问题——你定义的night_index条件逻辑有误哦,夜晚时段应该是早8点前或者晚10点及之后,也就是(rng.hour < 8) | (rng.hour >= 22),之前的条件和白天时段重叠了,会导致数据划分出错。

接下来给你两种实用的实现方式,轻松完成根据小时值设置目标列的需求:

方法一:loc定位赋值(直观清晰)

这种方式适合简单的分段逻辑,可读性拉满:

import pandas as pd

# 读取并预处理数据(保留你的原有代码)
df = pd.read_csv('Data.csv', sep='\t')
df['DateTime'] = pd.to_datetime(df['DateTime'])
df.set_index('DateTime', inplace=True)

# 初始化目标列(比如命名为TimePeriod)
df['TimePeriod'] = ''

# 给白天时段(8:00-21:59)赋值
df.loc[(df.index.hour >= 8) & (df.index.hour < 22), 'TimePeriod'] = 'Day'

# 给夜晚时段(22:00-次日7:59)赋值
df.loc[(df.index.hour < 8) | (df.index.hour >= 22), 'TimePeriod'] = 'Night'

方法二:numpy.where简化代码(一行搞定)

如果你的时段划分只有两类,用numpy.where可以大幅简化代码:

import pandas as pd
import numpy as np

# 数据预处理部分同上
df = pd.read_csv('Data.csv', sep='\t')
df['DateTime'] = pd.to_datetime(df['DateTime'])
df.set_index('DateTime', inplace=True)

# 一行完成时段判断与赋值
df['TimePeriod'] = np.where((df.index.hour >= 8) & (df.index.hour < 22), 'Day', 'Night')

额外拓展:复杂时段划分用pd.cut

如果需要更细致的时段区分(比如凌晨、上午、下午),可以用分箱函数批量处理:

# 定义小时区间和对应标签
hour_bins = [-1, 8, 12, 18, 22, 24]
labels = ['Night', 'Morning', 'Afternoon', 'Evening', 'Night']

# 根据小时值完成分箱赋值
df['TimePeriod'] = pd.cut(df.index.hour, bins=hour_bins, labels=labels)

你可以根据自己的实际需求选择合适的方法~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:05:07