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

Pandas 如何用explode拆分START_HOUR至END_HOUR为逐小时独立行

小时区间Explode展开实现方法

常见调用失败原因

  • 直接对整数类型的START_HOUR、END_HOUR列调用explode()无法生效:explode方法仅支持展开列中存储的可迭代对象(列表、numpy数组、Series等),对普通标量整数列执行该操作不会产生拆行效果。

分步实现流程

  • 逐行生成两个小时边界之间的连续整数序列,存储为新的可迭代类型列
  • 对新生成的小时序列列执行explode()完成逐小时拆行
  • 调整列名、删除原始起止小时字段,匹配预期输出结构

完整可运行代码

import pandas as pd
import numpy as np

# 载入原始DataFrame
existing_data = {'STORE_ID': ['1234','5678','9876','3456','6789'],
        'FULFILLMENT_TYPE': ['DELIVERY','DRIVE','DELIVERY','DRIVE','DELIVERY'], 
        'FORECAST_DATE':['2020-08-01','2020-08-02','2020-08-03','2020-08-04','2020-08-05'],
        'DAY_OF_WEEK':['SATURDAY','SUNDAY','MONDAY','TUESDAY','WEDNESDAY'],
        'START_HOUR':[8,8,6,7,9],
        'END_HOUR':[19,19,18,19,17]}
existing = pd.DataFrame(data=existing_data)

# 逐行生成小时区间数组
# 默认规则为左闭右开:从START_HOUR开始,到END_HOUR的前一个小时结束
# 若需要包含END_HOUR,将arange的右端点调整为 row['END_HOUR'] + 1 即可
existing['hour_range'] = existing.apply(
    lambda row: np.arange(row['START_HOUR'], row['END_HOUR']),
    axis=1
)

# 执行explode展开
result = existing.explode('hour_range')

# 整理列结构匹配预期输出
result = result.rename(columns={'hour_range': 'HOUR'})
result = result.drop(columns=['START_HOUR', 'END_HOUR'])

结果说明

  • 展开后每一条原始记录会按照区间内的小时数拆分为独立行,除逐小时递增的HOUR列外,其余字段值均与原记录保持一致
  • 调整区间包含规则时,仅需修改np.arange的边界参数,无需改动其他流程逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 06:06:06