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

如何将Pandas DataFrame重排为指定长格式(匹配对应日期)

Pandas 宽表转长表的最佳方案

你的需求是把宽格式的DataFrame转换为长格式,这里用pd.melt()是最直接高效的方法,比transpose、pivot更适配这个场景。

原数据结构

import pandas as pd

data = {'date': ['1/1/2022', '1/2/2022','1/3/2022'], 
        'ticker1': [11, 21, 31], 
        'ticker2': [12, 22, 32],  
        'ticker3': [13, 23, 33]}
df = pd.DataFrame(data)

转换代码

# 宽表转长表
melted_df = pd.melt(df, 
                   id_vars=['date'],  # 保留作为标识的列
                   value_vars=['ticker1', 'ticker2', 'ticker3'],  # 需要转换的列
                   var_name='ticker',  # 转换后的类别列名
                   value_name='price')  # 转换后的数值列名

转换结果

转换后的DataFrame会和你预期的逻辑一致(注:你提供的目标示例中ticker列的取值存在重复错误,正确结果应为每个date对应ticker1/ticker2/ticker3各一行):

print(melted_df)
# 输出:
#         date   ticker  price
# 0  1/1/2022  ticker1     11
# 1  1/2/2022  ticker1     21
# 2  1/3/2022  ticker1     31
# 3  1/1/2022  ticker2     12
# 4  1/2/2022  ticker2     22
# 5  1/3/2022  ticker2     32
# 6  1/1/2022  ticker3     13
# 7  1/2/2022  ticker3     23
# 8  1/3/2022  ticker3     33

其他方法的局限性

  • transpose:只是简单交换行列,无法实现按类别拆分列的需求,转换后结构完全不符合预期。
  • pivot:主要用于长表转宽表或聚合数据,是melt的反向操作,不适合当前场景。
  • stack:虽然也能实现宽转长,但需要先设置索引,操作步骤更繁琐,适合处理多层列索引的情况,单层列用melt更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:05:24