首页 > 解决方案 > 如何在索引列中旋转具有重复条目的数据框?

问题描述

我有一个数据框,我真的很难转入正确的结构,我想在这里寻求一些帮助,因为我无法弄清楚要使用的正确索引、列和值参数。我正在使用python。

我有这个数据框(对不起,它很长,但我觉得有必要包含所有内容以显示结构):

  Size      Color    Parameter      Estimate
---------------------------------------------
 Small       Blue           P1            XX
 Small       Blue           P2            XX 
 Small       Blue           P3            XX
 Small        Red           P1            XX
 Small        Red           P2            XX
 Small        Red           P3            XX
 Small      Green           P1            XX  
 Small      Green           P2            XX
 Small      Green           P3            XX
Medium       Blue           P1            XX
Medium       Blue           P2            XX 
Medium       Blue           P3            XX
Medium        Red           P1            XX
Medium        Red           P2            XX
Medium        Red           P3            XX
Medium      Green           P1            XX  
Medium      Green           P2            XX
Medium      Green           P3            XX
   Big       Blue           P1            XX
   Big       Blue           P2            XX 
   Big       Blue           P3            XX
   Big        Red           P1            XX
   Big        Red           P2            XX
   Big        Red           P3            XX
   Big      Green           P1            XX  
   Big      Green           P2            XX
   Big      Green           P3            XX

我想以某种方式把这个数据框变成这样:

               P1                     P2                      P3
         Blue    Green    Red    Blue   Green     Red    Blue   Green     Red
   Big     34      17      12      19      39      28      49      39      48
Medium     40      15      24      15      29      21      41      12      26
 Small     10      31      19      46      39      43      16      13      41

我尝试使用pd.pivot()and pd.pivot_table(),运行以下多种组合:

df.pivot(index ='Size', columns ='Color', values =['Parameter', 'Estimate'])

但每次我不断收到此错误:

ValueError: Index contains duplicate entries, cannot reshape

如何正确填写数据透视表参数,以便将初始数据框重新构建为目标数据框?

标签: pythondataframeindexingpivot

解决方案


您需要['Parameter', 'Color']columns参数中:

(df.pivot(index='Size', columns=['Parameter', 'Color'], values='Estimate')
   .sort_index(axis=1))

Parameter   P1             P2             P3          
Color     Blue Green Red Blue Green Red Blue Green Red
Size                                                  
Big         XX    XX  XX   XX    XX  XX   XX    XX  XX
Medium      XX    XX  XX   XX    XX  XX   XX    XX  XX
Small       XX    XX  XX   XX    XX  XX   XX    XX  XX

您的实际数据可能具有重复的索引(示例数据中未显示),这意味着您需要使用groupbyedcumcount列消除歧义,然后您的index参数将成为['Size', 'cumcounted_column'].


推荐阅读