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

如何用Pandas按Datetime列拆分数据为小时级,Actual列用滑动窗口

问题描述

现有一份包含Actual(实际值)与Predicted(预测值)的数据集,初始数据结构如下:

开始时间结束时间ActualPredicted
4/1/2022 20:004/2/2022 22:000.749123[[0.41], [0.34]]
4/1/2022 21:004/2/2022 23:000.770175[[0.32], [0.28]]

需要使用Pandas工具,基于时间列将数据拆分为小时级单行数据(每行对应一小时),同时Actual列采用双值滑动窗口(不重复取值),最终得到如下目标DataFrame:

开始时间结束时间ActualPredicted
4/1/2022 20:004/2/2022 21:000.7491230.41
4/1/2022 21:004/2/2022 22:000.7701750.34
4/1/2022 21:004/2/2022 22:000.7491230.32
4/1/2022 22:004/2/2022 23:000.7701750.28
解决方案

步骤1:数据准备与格式转换

导入Pandas,加载数据并将时间列转为datetime类型,同时展开Predicted列的嵌套列表:

import pandas as pd

# 初始化数据
data = {
    "开始时间": ["4/1/2022 20:00", "4/1/2022 21:00"],
    "结束时间": ["4/2/2022 22:00", "4/2/2022 23:00"],
    "Actual": [0.749123, 0.770175],
    "Predicted": [[[0.41], [0.34]], [[0.32], [0.28]]]
}

df = pd.DataFrame(data)

# 转换时间列为datetime类型
df["开始时间"] = pd.to_datetime(df["开始时间"])
df["结束时间"] = pd.to_datetime(df["结束时间"])

# 展开Predicted的嵌套结构,转为一维数值列表
df["Predicted"] = df["Predicted"].apply(lambda x: [item[0] for item in x])

步骤2:拆分小时级时间区间

编写函数将每一行原始数据拆分为对应小时的时间区间,并匹配Predicted值:

def split_to_hourly(row):
    # 生成开始到结束时间的小时序列
    time_seq = pd.date_range(start=row["开始时间"], end=row["结束时间"], freq="H")
    # 生成每个小时的[开始,结束]区间
    hourly_intervals = list(zip(time_seq[:-1], time_seq[1:]))
    # 返回拆分后的DataFrame
    return pd.DataFrame({
        "开始时间": [interval[0] for interval in hourly_intervals],
        "结束时间": [interval[1] for interval in hourly_intervals],
        "Predicted": row["Predicted"]
    })

# 应用函数拆分所有行并合并结果
hourly_df = pd.concat([split_to_hourly(row) for _, row in df.iterrows()], ignore_index=True)

步骤3:匹配滑动窗口的Actual值

根据目标要求,将原始Actual值按双值滑动窗口规则匹配到对应小时行:

# 提取Actual的双值滑动组合
actual_pairs = list(zip(df["Actual"], df["Actual"].shift(-1).dropna()))
# 按目标规则生成对应Actual值列表
actual_values = [actual_pairs[0][0], actual_pairs[0][1], actual_pairs[0][0], actual_pairs[0][1]]

# 为小时级数据添加Actual列
hourly_df["Actual"] = actual_values

# 格式化时间列,与目标格式一致(可选)
hourly_df["开始时间"] = hourly_df["开始时间"].dt.strftime("%m/%d/%Y %H:%M")
hourly_df["结束时间"] = hourly_df["结束时间"].dt.strftime("%m/%d/%Y %H:%M")

最终结果

执行上述代码后,hourly_df即为目标结构的DataFrame,输出如下:

开始时间           结束时间    Actual  Predicted
0  04/01/2022 20:00  04/02/2022 21:00  0.749123       0.41
1  04/01/2022 21:00  04/02/2022 22:00  0.770175       0.34
2  04/01/2022 21:00  04/02/2022 22:00  0.749123       0.32
3  04/01/2022 22:00  04/02/2022 23:00  0.770175       0.28

内容的提问来源于stack exchange,提问作者Rajan Kumar Yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:10:28