整理熊猫实验的结果

时间:2019-02-07 21:10:54

标签: python pandas

我有以下输入数据。每行都是一个实验的结果:

  instance algo  profit  time
        x    A      10   0.5
        y    A      20   0.1
        z    A      13   0.7
        x    B      39   0.9
        y    B      12   1.2
        z    B      14   0.6

我想生成下表:

            A               B   
instance    profit  time    profit  time
x           10      0.5     39      0.9
y           20      0.1     12      1.2
z           13      0.7     14      0.6

我尝试使用pivot和pivot_table没有成功。有没有办法用熊猫来达到这个目的?

2 个答案:

答案 0 :(得分:1)

首先melt可以在同一列中获得'profit''time',然后使用具有多个列级别的pivot table

(df.melt(id_vars=['instance', 'algo'])
.pivot_table(index='instance', columns=['algo', 'variable'], values='value'))
#algo          A           B     
#variable profit time profit time
#instance                        
#x          10.0  0.5   39.0  0.9
#y          20.0  0.1   12.0  1.2
#z          13.0  0.7   14.0  0.6

答案 1 :(得分:1)

set_indexunstack

df.set_index(['instance', 'algo']).unstack().swaplevels(1, 0, axis=1)


         profit     time     
algo          A   B    A    B
instance                     
x            10  39  0.5  0.9
y            20  12  0.1  1.2
z            13  14  0.7  0.6

(df.set_index(['instance', 'algo'])
   .unstack()
   .swaplevel(1, 0, axis=1)
   .sort_index(axis=1))

algo          A           B     
         profit time profit time
instance                        
x            10  0.5     39  0.9
y            20  0.1     12  1.2
z            13  0.7     14  0.6

另一个选择是使用pivotswaplevel

(df.pivot('instance', 'algo', ['profit', 'time'])
   .swaplevel(1, 0, axis=1)
   .sort_index(axis=1))

algo          A           B     
         profit time profit time
instance                        
x          10.0  0.5   39.0  0.9
y          20.0  0.1   12.0  1.2
z          13.0  0.7   14.0  0.6