在多索引熊猫中,外索引升序,内索引降序

时间:2019-03-07 23:01:27

标签: python pandas

我有一个要用于sort_index的多索引数据框。

对于外部索引,我希望它按升序排列;对于第二个索引,我希望它按降序排列。

我尝试了

df是我的数据框的名称

EMAIL

每个外部索引都有20个内部索引。

1 个答案:

答案 0 :(得分:0)

首先,让我们创建一个可复制的示例。

In [1]: import numpy as np
   ...: import pandas as pd
   ...: np.random.seed(1)
   ...: index = pd.MultiIndex.from_product([[1, 2, 3], [1, 2, 3, 4]], names=['outer', 'inner'])
   ...: inds = list(range(len(index)))
   ...: np.random.shuffle(inds)
   ...: index = index[inds]
   ...: data = np.arange(len(index))
   ...: df = pd.DataFrame(index=index, data=data, columns=['A'])
   ...: df
Out[1]: 
              A
outer inner    
1     3       0
      4       1
2     1       2
3     3       3
1     2       4
2     3       5
1     1       6
2     4       7
3     4       8
      2       9
      1      10
2     2      11

因此,pd.DataFrame.sort_levels不允许我们同时按不同的顺序对级别进行排序,但是我们可以将它们逐段排序并将结果组合在一起。

In [2]: (df
   ...:  .sort_index(level='outer', sort_remaining=False)
   ...:  .groupby(level='outer').apply(lambda df: df.sort_index(level='inner', ascending=False))
   ...:  .reset_index(level=0, drop=True)
   ...: )
Out[2]: 
              A
outer inner    
1     4       1
      3       0
      2       4
      1       6
2     4       7
      3       5
      2      11
      1       2
3     4       8
      3       3
      2       9
      1      10

尽管由于您没有描述数据,但我不知道您是否可以使用数字内部索引值,将-1乘以两个索引,然后按同时,然后再乘以-1。