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

如何使用Pandas将DataFrame转换为指定堆叠格式?

问题与解决方案:Pandas DataFrame指定堆叠格式转换

问题描述

原始DataFrame:

Prod  ProdDesc   tot    avg   qtr        val_qtr
   A      Cyl       110   8.7    202301     12
   A      Cyl       110   8.7    202302     56.9
   A      Cyl       110   8.7    202303      9
   A      Cyl       110   8.7    202304      0

尝试使用melt方法:

df_tra = df.melt(id_vars=['Prod', 'ProdDesc'], var_name='Attrib', value_name='Value')
df_tra.drop_duplicates()

得到的结果不符合预期:

Prod  ProdDesc  Attrib   Value
     A    Cyl       tot      110           
     A    Cyl       avg      8.7           
     A    Cyl       qtr      202301    
     A    Cyl       qtr      202302
     A    Cyl       qtr      202303
     A    Cyl       qtr      202304        
     A    Cyl       val_qtr  12    
     A    Cyl       val_qtr  56.9
     A    Cyl       val_qtr  9
     A    Cyl       val_qtr  0  

期望得到的格式:

df_actual_wanted 

    Prod  ProdDesc  Attrib   Value
    A     Cyl       tot      110           
    A     Cyl       avg      8.7           
    A     Cyl       202301   12 
    A     Cyl       202302   56.9
    A     Cyl       202303    9
    A     Cyl       202304    0     

解决方案

核心思路是拆分处理两类数据:静态属性(tot、avg,所有行值相同)和季度数据(qtr作为属性名,val_qtr作为对应值),再合并结果:

import pandas as pd

# 处理静态属性:tot和avg,去重后转成目标格式
static_attrs = df[['Prod', 'ProdDesc', 'tot', 'avg']].drop_duplicates()
part1 = static_attrs.melt(id_vars=['Prod', 'ProdDesc'], var_name='Attrib', value_name='Value')

# 处理季度数据:直接重命名列,将qtr作为属性名,val_qtr作为对应值
part2 = df[['Prod', 'ProdDesc', 'qtr', 'val_qtr']].rename(columns={'qtr': 'Attrib', 'val_qtr': 'Value'})

# 合并两部分,重置索引
df_actual_wanted = pd.concat([part1, part2], ignore_index=True)

代码说明

  1. 静态属性处理:由于tot和avg在所有行中值一致,先通过drop_duplicates()保留唯一记录,再用melt转成Attrib-Value格式。
  2. 季度数据处理:直接将qtr列重命名为Attrib,val_qtr重命名为Value,得到季度对应的键值对。
  3. 合并结果:用pd.concat()将两部分数据合并,ignore_index=True重置索引以避免重复。

运行后即可得到期望的DataFrame格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:52:48