如何正确透视Pandas DataFrame不丢失数据,得到目标格式结果?
你遇到的「压缩」问题来自两个核心原因:
pd.pivot_table默认会对同组(索引, 列)组合下的多个score值执行聚合计算,默认聚合规则为求平均值,会把多条数据合并为单条- 你设置的索引顺序为
['metric', 'Final Result'],和你需要的final_result在前的行维度顺序不符,同时如果列名大小写/拼写和原表不一致,也会导致数据异常
方案1:无重复组合时直接使用pd.pivot
如果确认每组(final_result, metric, model)对应唯一的score值,不需要聚合逻辑,直接用pd.pivot即可避免自动聚合:
# 注意index顺序、列名要和原DataFrame完全一致 res = pd.pivot( modelPerformance, values='score', index=['final_result', 'metric'], columns='model' ).reset_index()
如果需要关闭多层索引的合并显示效果(避免视觉上的「压缩」感),可以提前设置pandas显示参数:
pd.set_option('display.multi_sparse', False)
方案2:存在重复组合时指定聚合规则保留全量数据
如果同组下存在多个score值,明确指定聚合函数即可避免默认聚合导致的数据丢失:
# 示例1:保留同组所有score值,用列表存储 res = pd.pivot_table( modelPerformance, values='score', index=['final_result', 'metric'], columns='model', aggfunc=list, fill_value=[] # 空值填充为空列表 ) # 示例2:同组取最大值,空值填充为0 res = pd.pivot_table( modelPerformance, values='score', index=['final_result', 'metric'], columns='model', aggfunc='max', fill_value=0 )
内容的提问来源于stack exchange,提问作者Jamess11
相关产品推荐
相关产品推荐

