Python 3.x 分层索引按列排序,同时保留原始列

Python 3.x 分层索引按列排序,同时保留原始列,python-3.x,pandas,Python 3.x,Pandas,我试图模拟一个Hiralical索引数据帧,如下所示: >>> raw_data = ({'city': ['Delhi', 'Kanpur', 'Mumbai', 'Pune','Delhi', 'Kanpur', 'Mumbai', 'Pune'], ... 'rank': ['1st', '2nd', '1st', '2nd','1st', '2nd', '1st', '2nd'], ... 'name':

我试图模拟一个Hiralical索引数据帧,如下所示:

>>> raw_data = ({'city': ['Delhi', 'Kanpur', 'Mumbai', 'Pune','Delhi', 'Kanpur', 'Mumbai', 'Pune'],
...                 'rank': ['1st', '2nd', '1st', '2nd','1st', '2nd', '1st', '2nd'],
...                 'name': ['Ramesh', 'Kirpal', 'Jungi', 'Sanju','Ramesh', 'Kirpal', 'Jungi', 'Sanju'],
...                 'score1': [10,15,20,25,10,15,20,25],
...                 'score2': [20,35,40,45,20,35,40,45]})
下面是DataFrame的外观,因此,datFrame附带了默认索引

>>> df = pd.DataFrame(raw_data, columns = ['city', 'rank', 'name', 'score1', 'score2'])
>>> df
     city rank    name  score1  score2
0   Delhi  1st  Ramesh      10      20
1  Kanpur  2nd  Kirpal      15      35
2  Mumbai  1st   Jungi      20      40
3    Pune  2nd   Sanju      25      45
4   Delhi  1st  Ramesh      10      20
5  Kanpur  2nd  Kirpal      15      35
6  Mumbai  1st   Jungi      20      40
7    Pune  2nd   Sanju      25      45
我想通过选择
'city',rank'
列和
set.Index
方法来使用层次索引,同时保持原始列不变

>>> df.set_index(['city', 'rank'], drop=False)
               city rank    name  score1  score2
city   rank
Delhi  1st    Delhi  1st  Ramesh      10      20
Kanpur 2nd   Kanpur  2nd  Kirpal      15      35
Mumbai 1st   Mumbai  1st   Jungi      20      40
Pune   2nd     Pune  2nd   Sanju      25      45
Delhi  1st    Delhi  1st  Ramesh      10      20
Kanpur 2nd   Kanpur  2nd  Kirpal      15      35
Mumbai 1st   Mumbai  1st   Jungi      20      40
Pune   2nd     Pune  2nd   Sanju      25      45
但我希望先按城市建立索引,然后再按等级建立索引:

               city rank    name  score1  score2
city   rank
Delhi  1st    Delhi  1st  Ramesh      10      20
       1st    Delhi  1st  Ramesh      10      20

Kanpur 2nd   Kanpur  2nd  Kirpal      15      35
       2nd   Kanpur  2nd  Kirpal      15      35

Mumbai 1st   Mumbai  1st   Jungi      20      40
       1st   Mumbai  1st   Jungi      20      40

Pune   2nd     Pune  2nd   Sanju      25      45
       2nd     Pune  2nd   Sanju      25      45

就快到了,只需应用
排序索引()

收益率:

               city rank    name  score1  score2
city   rank                                     
Delhi  1st    Delhi  1st  Ramesh      10      20
       1st    Delhi  1st  Ramesh      10      20
Kanpur 2nd   Kanpur  2nd  Kirpal      15      35
       2nd   Kanpur  2nd  Kirpal      15      35
Mumbai 1st   Mumbai  1st   Jungi      20      40
       1st   Mumbai  1st   Jungi      20      40
Pune   2nd     Pune  2nd   Sanju      25      45
       2nd     Pune  2nd   Sanju      25      45
               city rank    name  score1  score2
city   rank                                     
Delhi  1st    Delhi  1st  Ramesh      10      20
Kanpur 2nd   Kanpur  2nd  Kirpal      15      35
Mumbai 1st   Mumbai  1st   Jungi      20      40
Pune   2nd     Pune  2nd   Sanju      25      45
要删除重复行,请添加
删除重复行()

收益率:

               city rank    name  score1  score2
city   rank                                     
Delhi  1st    Delhi  1st  Ramesh      10      20
       1st    Delhi  1st  Ramesh      10      20
Kanpur 2nd   Kanpur  2nd  Kirpal      15      35
       2nd   Kanpur  2nd  Kirpal      15      35
Mumbai 1st   Mumbai  1st   Jungi      20      40
       1st   Mumbai  1st   Jungi      20      40
Pune   2nd     Pune  2nd   Sanju      25      45
       2nd     Pune  2nd   Sanju      25      45
               city rank    name  score1  score2
city   rank                                     
Delhi  1st    Delhi  1st  Ramesh      10      20
Kanpur 2nd   Kanpur  2nd  Kirpal      15      35
Mumbai 1st   Mumbai  1st   Jungi      20      40
Pune   2nd     Pune  2nd   Sanju      25      45

就快到了,只需应用
排序索引()

收益率:

               city rank    name  score1  score2
city   rank                                     
Delhi  1st    Delhi  1st  Ramesh      10      20
       1st    Delhi  1st  Ramesh      10      20
Kanpur 2nd   Kanpur  2nd  Kirpal      15      35
       2nd   Kanpur  2nd  Kirpal      15      35
Mumbai 1st   Mumbai  1st   Jungi      20      40
       1st   Mumbai  1st   Jungi      20      40
Pune   2nd     Pune  2nd   Sanju      25      45
       2nd     Pune  2nd   Sanju      25      45
               city rank    name  score1  score2
city   rank                                     
Delhi  1st    Delhi  1st  Ramesh      10      20
Kanpur 2nd   Kanpur  2nd  Kirpal      15      35
Mumbai 1st   Mumbai  1st   Jungi      20      40
Pune   2nd     Pune  2nd   Sanju      25      45
要删除重复行,请添加
删除重复行()

收益率:

               city rank    name  score1  score2
city   rank                                     
Delhi  1st    Delhi  1st  Ramesh      10      20
       1st    Delhi  1st  Ramesh      10      20
Kanpur 2nd   Kanpur  2nd  Kirpal      15      35
       2nd   Kanpur  2nd  Kirpal      15      35
Mumbai 1st   Mumbai  1st   Jungi      20      40
       1st   Mumbai  1st   Jungi      20      40
Pune   2nd     Pune  2nd   Sanju      25      45
       2nd     Pune  2nd   Sanju      25      45
               city rank    name  score1  score2
city   rank                                     
Delhi  1st    Delhi  1st  Ramesh      10      20
Kanpur 2nd   Kanpur  2nd  Kirpal      15      35
Mumbai 1st   Mumbai  1st   Jungi      20      40
Pune   2nd     Pune  2nd   Sanju      25      45

您需要按城市、DF.SotTyValx(“城市”)对数据进行排序。StIGEL索引([城市','Real'’,LUP=false)@ RAHLF23,是的,但是,您可以考虑这两种方式。@毗舍离,它的作品!THNX一英里。你需要通过城市、DF.SotTyValx(“城市”)来排序数据。StIGEX索引([城市','Real'’,Loop= false)@ RAHLF23,是的,但是,你可以考虑这两种方式。@毗舍离,它的作品!一英里。