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

如何基于datetime列将单条预订记录拆分为逐小时的多行数据

实现方案

你可以用pandas完成这个拆分需求,具体实现步骤和代码如下:

前置准备

首先确保你已经安装了pandas,导入依赖:

import pandas as pd
from datetime import timedelta

步骤1:加载数据并转换时间字段格式

首先把原始数据里的Start Date和End Date转换成datetime类型,方便后续时间计算:

# 示例加载数据,你可以替换成你自己的读数据逻辑,比如pd.read_excel、pd.read_csv
df = pd.DataFrame([
    ["abc@corp.com", "L11M2", "2021-02-01 08:00:00", "2021-02-01 11:00:00"],
    ["xyz@corp.com", "L12M4", "2021-02-01 08:00:00", "2021-02-01 10:00:00"]
], columns=["email", "room", "Start Date", "End Date"])

# 转换时间字段类型
df["Start Date"] = pd.to_datetime(df["Start Date"])
df["End Date"] = pd.to_datetime(df["End Date"])

步骤2:生成每小时时段列表并拆分

对每行数据生成所有对应的一小时时段,再展开成多行即可:

# 定义函数:输入单行数据,返回所有拆分后的(开始时间, 结束时间)元组列表
def split_hourly(row):
    hours = int((row["End Date"] - row["Start Date"]).total_seconds() / 3600)
    time_slots = []
    for i in range(hours):
        start = row["Start Date"] + timedelta(hours=i)
        end = start + timedelta(hours=1)
        time_slots.append((start, end))
    return time_slots

# 生成时段列
df["time_slots"] = df.apply(split_hourly, axis=1)
# 展开时段列为多行
df = df.explode("time_slots")
# 拆分时段列到Start Date和End Date
df[["Start Date", "End Date"]] = pd.DataFrame(df["time_slots"].tolist(), index=df.index)
# 删除多余的辅助列
df = df.drop("time_slots", axis=1)

# 输出结果,如果需要保持字符串格式可以转回去
df["Start Date"] = df["Start Date"].dt.strftime("%Y-%m-%d %H:%M:%S")
df["End Date"] = df["End Date"].dt.strftime("%Y-%m-%d %H:%M:%S")
print(df)

运行上述代码就会得到你需要的输出结果。如果你的原始数据存在不是整小时的预订记录,可以先做一轮数据校验,过滤或者取整后再执行拆分逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:48:04