我有一个要用于sort_index的多索引数据框。
对于外部索引,我希望它按升序排列;对于第二个索引,我希望它按降序排列。
我尝试了
df是我的数据框的名称
EMAIL
每个外部索引都有20个内部索引。
答案 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。