Pandas如何对仅含时间不含日期的列按自定义区间分箱
操作步骤
假设你已经将timestamp_time列转换为pandas支持的datetime格式,按以下步骤操作即可:
- 提取24小时制的小时数值
# 从datetime列中提取小时(取值范围0~23的整数) df['hour'] = df['timestamp_time'].dt.hour
如果你转换后得到的是字符串格式的24小时制时间(比如
13:05),先执行转换再提取小时:df['timestamp_time'] = pd.to_datetime(df['timestamp_time'], format='%H:%M') df['hour'] = df['timestamp_time'].dt.hour
- 使用
pd.cut完成分箱
按照你给出的闭区间要求设置分箱边界和对应标签即可:
# 分箱边界,配合左闭规则匹配需求 bins = [0, 5, 12, 17, 21, 24] # 对应时间段标签,顺序和区间一一匹配 labels = ['midnight', 'morning', 'afternoon', 'evening', 'night'] # 生成结果列,right=False表示区间为左闭右开,刚好匹配你的闭区间要求 df['time_of_the_day'] = pd.cut(df['hour'], bins=bins, labels=labels, right=False)
区间匹配逻辑验证
[0,5)→ 小时0~4 → 对应12AM~4:59AM →midnight[5,12)→ 小时5~11 → 对应5AM~11:59AM →morning[12,17)→ 小时12~16 → 对应12PM~4:59PM →afternoon[17,21)→ 小时17~20 → 对应5PM~8:59PM →evening[21,24)→ 小时21~23 → 对应9PM~11:59PM →night
不需要保留hour列的话,执行df.drop('hour', axis=1, inplace=True)删除即可。
内容的提问来源于stack exchange,提问作者ahmedshahriar
相关产品推荐
相关产品推荐

