如何将Python Pandas DataFrame按多列组合转换为宽表结构?
Pandas DataFrame 结构转换实现方案
原始数据构造
先还原你提供的原始DataFrame:
import pandas as pd df = pd.DataFrame({ '产品': ['Apple', 'Apple', 'Banana', 'Banana'], '颜色': ['Yellow', 'Green', 'Yellow', 'Green'], '等级': ['A', 'B', 'B', 'A'], '价格': [1000, 500, 2000, 3000], '尺寸': [3, 4, 5, 6] })
转换实现步骤
可以通过透视表+列名重构的方式实现目标结构,具体代码如下:
# 执行透视操作,按产品分组,将颜色、等级作为列维度,价格和尺寸作为值 pivoted_df = df.pivot(index='产品', columns=['颜色', '等级'], values=['价格', '尺寸']) # 重构列名,将多层级列合并为目标格式:Price_颜色_等级、Size_颜色_等级 pivoted_df.columns = [f'{val_type}_{color}_{grade}' for val_type, color, grade in pivoted_df.columns] # 重置索引将产品变回普通列,同时把缺失值填充为0并转为整数类型 final_df = pivoted_df.reset_index().fillna(0).astype(int)
转换结果
执行后final_df的结构与你期望的完全一致:
| 产品 | Price_Yellow_A | Size_Yellow_A | Price_Yellow_B | Size_Yellow_B | Price_Green_A | Size_Green_A | Price_Green_B | Size_Green_B |
|---|---|---|---|---|---|---|---|---|
| Apple | 1000 | 3 | 0 | 0 | 0 | 0 | 500 | 4 |
| Banana | 0 | 0 | 2000 | 5 | 3000 | 6 | 0 | 0 |
内容的提问来源于stack exchange,提问作者yunastrian
相关产品推荐
相关产品推荐

