【问题标题】:Pandas: How to create a multi-indexed pivotPandas:如何创建多索引枢轴
【发布时间】:2016-11-07 09:57:42
【问题描述】:

我有一组由两个变量定义的实验:scenarioheight。对于每个实验,我进行 3 次测量:结果 1、2 和 3。 收集所有结果的数据框如下所示:

import numpy as np
import pandas as pd

df = pd.DataFrame()
df['Scenario']= np.repeat(['Scenario a','Scenario b','Scenario c'],3)
df['height'] = np.tile([0,1,2],3)
df['Result 1'] = np.arange(1,10)
df['Result 2'] = np.arange(20,29)
df['Result 3'] = np.arange(30,39)

如果我运行以下命令:

mypiv = df.pivot('Scenario','height').transpose()
writer = pd.ExcelWriter('test_df_pivot.xlsx')
mypiv.to_excel(writer,'test df pivot')
writer.save()

我获得了一个数据框,其中列是scenarios,并且行具有由resultheight 定义的多索引:

+----------+--------+------------+------------+------------+
|          | height | Scenario a | Scenario b | Scenario c |
+----------+--------+------------+------------+------------+
| Result 1 |      0 |          1 |          4 |          7 |
|          |      1 |          2 |          5 |          8 |
|          |      2 |          3 |          6 |          9 |
| Result 2 |      0 |         20 |         23 |         26 |
|          |      1 |         21 |         24 |         27 |
|          |      2 |         22 |         25 |         28 |
| Result 3 |      0 |         30 |         33 |         36 |
|          |      1 |         31 |         34 |         37 |
|          |      2 |         32 |         35 |         38 |
+----------+--------+------------+------------+------------+

如何创建交换索引的枢轴,即首先是height,然后是result

我找不到直接创建它的方法。我设法得到了我想要的交换关卡并重新排序结果:

mypiv2 = mypiv.swaplevel(0,1 , axis=0).sortlevel(level=0,axis=0,sort_remaining=True)

但我想知道是否有更直接的方法。

【问题讨论】:

    标签: python pandas dataframe pivot multi-index


    【解决方案1】:

    你可以先set_index 然后stackunstack:

    print (df.set_index(['height','Scenario']).stack().unstack(level=1))
    Scenario         Scenario a  Scenario b  Scenario c
    height                                             
    0      Result 1           1           4           7
           Result 2          20          23          26
           Result 3          30          33          36
    1      Result 1           2           5           8
           Result 2          21          24          27
           Result 3          31          34          37
    2      Result 1           3           6           9
           Result 2          22          25          28
           Result 3          32          35          38
    

    【讨论】:

      猜你喜欢
      • 2015-05-30
      • 2017-03-07
      • 2021-03-04
      • 1970-01-01
      • 2017-08-13
      • 2019-10-28
      • 2021-05-15
      • 2013-07-07
      • 1970-01-01
      相关资源
      最近更新 更多