如何使用Pandas重新排序/排序数据框索引?

时间:2017-04-01 10:03:36

标签: python sorting pandas

我得到了一些数据:

# 3 Experiments 0,1 and 2.
# 2 Setups 'foo' and 'bar'
# 3 Measured parameters 'a', 'b' and 'c'
d = {0: {'foo': {'a': 12.68, 'b': 54.44, 'c': 83.98},
         'bar': {'a': 11.73, 'b': 53.34, 'c': 82.93}},
     2: {'foo': {'a': 11.12, 'b': 57.99, 'c': 81.05},
         'bar': {'a': 10.05, 'b': 56.12, 'c': 80.01}},
     1: {'foo': {'a': 13.41, 'b': 54.32, 'c': 82.74},
         'bar': {'a': 12.77, 'b': 53.15, 'c': 82.01}}}      

我在Pandas中导入了它们

ds = (pd.DataFrame.from_dict(d, orient='index')
      .stack().apply(pd.Series)
      .rename_axis(['experiment', 'setup']))

然后很好地显示:

                      a      b      c
experiment setup
0          foo    12.68  54.44  83.98
           bar    11.73  53.34  82.93
2          foo    11.12  57.99  81.05
           bar    10.05  56.12  80.01
1          foo    13.41  54.32  82.74
           bar    12.77  53.15  82.01

您注意到实验的顺序错误,设置也没有排序。所以我想对索引进行排序,以显示如下:

                      a      b      c
experiment setup
0          bar    11.73  53.34  82.93
           foo    12.68  54.44  83.98
1          bar    12.77  53.15  82.01
           foo    13.41  54.32  82.74
2          bar    10.05  56.12  80.01
           foo    11.12  57.99  81.05

我使用sortsort_indexsort_values甚至sortlevel尝试了很多内容,但我似乎没有用。我还尝试使用reset_index展平所有内容,然后再次使用sort,但它不起作用。

如何按需要对数据框进行排序或重新排序?

1 个答案:

答案 0 :(得分:3)

sort_index没有按预期工作,这很奇怪但我设法通过重置索引,排序值和设置索引来获得预期的输出:

ds = ds.reset_index()\
       .sort_values(by=['experiment','setup'])\
       .set_index(['experiment','setup'])