如何在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
相关产品推荐
相关产品推荐

