Pandas Dataframe通过将列转换为列索引来重新整形,但保持列索引的其余部分不变

时间:2014-05-06 07:41:25

标签: python pandas

我有一个Pandas Dataframe:

           Seq    Part    Type    Grand Total
   ------------------------------------------
    Q001   1      A       total     100
           1      A        ok        80
           1      A        not       20
           2      C       total     150
           2      C        ok       100
           2      C        not       50

我希望将其转换为:

           Seq    Part    total    ok      not
   --------------------------------------------
    Q001   1      A       100      80      20
           2      C       150     100      50

含义我希望Type列的值作为列标题,并将它们的相关值设置为各自列中的Grand total,保持DF的其余部分保持不变。

我想使用transpose / pivot这样的工具,而不是将整个东西一点一点地复制到另一个DF并按照我的意愿创建它。

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

我想我会这样做(使用unstack):

print df

      Q  Seq Part   Type  Grand_Total
0  Q001    1    A  total          100
1  Q001    1    A     ok           80
2  Q001    1    A    not           20
3  Q001    2    C  total          150
4  Q001    2    C     ok          100
5  Q001    2    C    not           50

为方便起见,我调用了您的第一列Q(如果它是您设置中的索引,请重置索引):

df = df.set_index(['Q','Seq','Part','Type']).unstack(['Type'])
print df

              Grand_Total          
Type                 total   ok  not
Q    Seq Part                       
Q001 1   A             100   80   20
     2   C             150  100   50

我认为这可以满足您的需求,但如果您不喜欢分层列索引,请执行以下操作:

df.columns = df.columns.get_level_values(1)
print df.reset_index()  

Type     Q  Seq Part  total   ok  not
0     Q001    1    A    100   80   20 
1     Q001    2    C    150  100   50