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

如何将Pandas DataFrame多行多列数据重构为单行格式?

Pandas 60分钟K线长表转单日期宽表实现

实现步骤

  • 预处理原始数据:删除无用的type列,从time字段提取小时数,固定周期标识为60(对应原sixty-min 60分钟线)
  • 透视表转换:以date为行索引,小时为列维度,把所有行情指标摊平为宽列,按照周期 小时 指标名的规则生成新列名
  • 列顺序对齐:按照给出的目标列结构调整列顺序,保证输出格式完全匹配

完整代码

import pandas as pd

# 假设原始DataFrame变量名为df
# 1. 字段预处理
df["hour"] = df["time"].astype(str).str.slice(0, 2).astype(int)
df = df.drop(columns=["type"])

# 2. 透视转宽表
pivot_df = df.pivot(
    index="date",
    columns="hour",
    values=["open", "close", "change", "high", "low", "200ema", "50ema"]
)
# 按规则重命名列
pivot_df.columns = [f"60 {hour} {metric}" for metric, hour in pivot_df.columns]
pivot_df = pivot_df.reset_index()

# 3. 按目标列顺序重排
target_columns = [
    'date',
    '60 9 open', '60 9 close', '60 9 change', '60 9 high', '60 9 low', '60 9 200ema', '60 9 50ema',
    '60 10 open', '60 10 close', '60 10 change', '60 10 high', '60 10 low', '60 10 200ema', '60 10 50ema',
    '60 11 open', '60 11 close', '60 11 change', '60 11 high', '60 11 low', '60 11 200ema', '60 11 50ema',
    '60 12 open', '60 12 close', '60 12 change', '60 12 high', '60 12 low', '60 12 200ema', '60 12 50ema',
    '60 13 open', '60 13 close', '60 13 change', '60 13 high', '60 13 low', '60 13 200ema', '60 13 50ema',
    '60 14 open', '60 14 close', '60 14 change', '60 14 high', '60 14 low', '60 14 200ema', '60 14 50ema',
    '60 15 open', '60 15 close', '60 15 change', '60 15 high', '60 15 low', '60 15 200ema', '60 15 50ema',
    '60 16 open', '60 16 close', '60 16 change', '60 16 high', '60 16 low', '60 16 200ema', '60 16 50ema'
]
result = pivot_df.reindex(columns=target_columns)

注意事项

  • 如果原始数据存在同一日期同一小时多条重复记录,需要先做去重处理再执行透视,否则会触发报错
  • 原始数据中200ema字段的空值会被完整保留,不会自动填充
  • 如果数据包含多个交易日,最终结果会自动按每个交易日生成一行,完全符合单行单日期的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:36:17