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

如何在Pandas DataFrame中将多列转换为单列实现宽表转长表?

如何将宽表转换为长表(指定列转单列)

原始DataFrame

Parent  Family Name  Money A  Money B

Jack    Everdeen     10000    20000
Rita    Lawrence     4000     2000
Amy     Donnie       5000     9000

期望结果

Parent  Family Name  Money     Money

Jack    Everdeen     Money A   10000    
Jack    Everdeen     Money B   20000
Rita    Lawrence     Money A   4000     
Rita    Lawrence     Money B   2000
Amy     Donnie       Money A   5000     
Amy     Donnie       Money B   9000

问题分析

你使用pivot_table的思路有误,pivot_table主要用于数据聚合和宽表生成,而你需要的是宽表转长表的逆透视操作,这类场景应该用pd.melt()函数来实现。

正确实现代码

import pandas as pd

# 创建原始DataFrame
data_1 = [['Jack','Everdeen',10000,20000],['Rita','Lawrence',4000,2000],['Amy','Donnie',5000,9000]]
df_1 = pd.DataFrame(data_1,columns=['Parent','Family Name','Money A','Money B'],dtype=float)

# 使用melt进行逆透视转换
result_df = pd.melt(
    df_1,
    id_vars=['Parent', 'Family Name'],  # 保持不变的标识列
    value_vars=['Money A', 'Money B'],  # 需要转换为行的目标列
    var_name='Money',  # 存储原列名的新列名
    value_name='Money'  # 存储原数值的新列名
)

# 可选:按Parent排序,匹配期望结果的行顺序
result_df = result_df.sort_values(by=['Parent', 'Family Name']).reset_index(drop=True)

print(result_df)

运行结果

Parent Family Name    Money    Money
0   Jack    Everdeen  Money A  10000.0
1   Jack    Everdeen  Money B  20000.0
2    Amy      Donnie  Money A   5000.0
3    Amy      Donnie  Money B   9000.0
4   Rita    Lawrence  Money A   4000.0
5   Rita    Lawrence  Money B   2000.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:05:55