如何使用Pandas pivot功能同时基于多列值生成透视表
多值字段透视转换实现方案(基于Pandas)
简化示例实现(ID、Gender、salary、age、weight场景)
直接使用pandas.pivot_table即可实现多值字段的透视,不需要额外拆分数据,示例代码如下:
import pandas as pd # 构造示例测试数据 df = pd.DataFrame({ 'ID': [1,2,3,4,5,6], 'Gender': ['男','女','男','女','男','女'], 'salary': [10000,12000,9000,11000,13000,14000], 'age': [25,30,28,32,26,29], 'weight': [70,55,75,52,68,58] }) # 执行透视转换 pivot_df = pd.pivot_table( df, index='ID', # 固定不变的行维度 columns='Gender', # 要展开为列的字段 values=['salary','age','weight'], # 要统计的多值字段 aggfunc='sum' # 聚合规则,根据需求调整为mean、count等,若ID+Gender唯一可取值first ) # 合并多层列名为单层级,生成salary_男、salary_女这类格式的列名 pivot_df.columns = [f'{val_col}_{gender}' for val_col, gender in pivot_df.columns] # 重置索引,把ID从索引转为普通列 pivot_df = pivot_df.reset_index()
实际业务场景实现(3个值字段+11种TipoPromo取值场景)
逻辑和简化示例完全一致,替换对应字段即可:
import pandas as pd # 读取你的数据集,根据实际文件格式调整读取方法 df = pd.read_excel('你的本地数据集路径.xlsx') # 执行透视转换 pivot_result = pd.pivot_table( df, index=['替换为你需要保留的所有非展开维度字段,比如日期、门店ID等'], columns='TipoPromo', values=['Venda_Bruta', 'Percent_Desconto', 'MargemPDV'], aggfunc='sum' # 按业务需求调整聚合规则 ) # 合并列名,生成33个符合要求的列 pivot_result.columns = [f'{val_col}_{tipo_promo}' for val_col, tipo_promo in pivot_result.columns] pivot_result = pivot_result.reset_index() # 可选:填充缺失值为0,避免某类TipoPromo无数据时出现空值 pivot_result = pivot_result.fillna(0)
注意事项
- 若你的数据中同一个「固定维度+TipoPromo」组合存在多行数据,必须明确指定符合业务逻辑的聚合规则,否则结果会不符合预期
- 若不需要聚合,仅做一对一的宽表转换,且「固定维度+TipoPromo」可以唯一确定一行数据,
aggfunc设置为'first'即可
内容的提问来源于stack exchange,提问作者Ysgramor 500
相关产品推荐
相关产品推荐

