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

使用Python动态实现多列股票数据列转行(宽表转长表)

Python环境下股票宽表转长表实现方案

核心使用pandas库的melt方法实现,无需手动枚举所有股票列名,可自动识别除日期列外的全部股票列完成转换,适配6000+股票列的处理场景。


实现步骤

  • 前置依赖准备
    先确保环境安装了pandas,导入依赖:

    import pandas as pd
    

    读取你的原始数据表,根据文件格式选择对应读取方法:

    # 读取csv格式文件
    df = pd.read_csv("你的股票数据文件路径.csv")
    # 如果是excel文件,替换为pd.read_excel("你的股票数据文件路径.xlsx")
    
  • 核心宽转长逻辑
    调用melt方法,仅指定需要保留的Date列,其余所有列自动识别为股票列做行转换:

    long_df = pd.melt(
        df,
        id_vars=["Date"],  # 保留不做转换的列,即原始日期列
        var_name="Stock",  # 转换后存储股票名称的列名
        value_name="Price" # 转换后存储价格数值的列名
    )
    
  • 按规则排序
    按照需求,先按股票名称分组,组内按日期升序排列:

    # 可选:如果Date列是字符串格式,先转成标准日期格式保证排序准确
    long_df["Date"] = pd.to_datetime(long_df["Date"])
    
    # 排序后重置索引
    long_df = long_df.sort_values(
        by=["Stock", "Date"],
        ascending=[True, True]
    ).reset_index(drop=True)
    
  • 可选优化
    如果需要剔除个股无价格的空记录,可以追加去空逻辑:

    long_df = long_df.dropna(subset=["Price"])
    

之前方法失效原因说明

  • transpose()为全表行列转置,会把原始日期列也转换为行/列维度,无法保留日期列的独立结构,不符合需求
  • 原生stack()方法默认会堆叠所有列,需要提前将Date列设置为索引才能得到近似结果,配置繁琐易出错,对动态列场景适配性差

效果验证

原始宽表样例结构:

DateStock1Stock2Stock3
2024-01-0210.223.58.7
2024-01-0310.523.18.9

转换后长表输出结构:

DateStockPrice
2024-01-02Stock110.2
2024-01-03Stock110.5
2024-01-02Stock223.5
2024-01-03Stock223.1
2024-01-02Stock38.7
2024-01-03Stock38.9

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:27:22