如何使用一个顶级列对多索引熊猫数据框进行排序?

我有一个这样的多索引数据集:


                                           mean             std

                                Happiness Score Happiness Score

Region                                                         

Australia and New Zealand              7.302500        0.020936

Central and Eastern Europe             5.371184        0.578274

Eastern Asia                           5.632333        0.502100

Latin America and Caribbean            6.069074        0.728157

Middle East and Northern Africa        5.387879        1.031656

North America                          7.227167        0.179331

Southeastern Asia                      5.364077        0.882637

Southern Asia                          4.590857        0.535978

Sub-Saharan Africa                     4.150957        0.584945

Western Europe                         6.693000        0.777886

我想按标准偏差对其进行排序。


我的尝试:


import numpy as np

import pandas as pd


df1.sort_values(by=('Region','std'))

如何解决问题?


慕标琳琳
浏览 220回答 3
3回答

紫衣仙女

设置np.random.seed(0)df = pd.DataFrame(np.random.choice(10, (5, 2)))df.columns = pd.MultiIndex.from_arrays([['mean', 'std'], ['Happiness Score'] * 2])df             mean             std  Happiness Score Happiness Score0               5               01               3               32               7               93               3               54               2               4您可以使用argsort和重新索引df:df.loc[:, ('std', 'Happiness Score')].argsort().values# array([0, 1, 4, 3, 2])df.iloc[df.loc[:, ('std', 'Happiness Score')].argsort().values]# df.iloc[np.argsort(df.loc[:, ('std', 'Happiness Score')])]             mean             std  Happiness Score Happiness Score0               5               01               3               34               2               43               3               52               7               9另一个解决方案是sort_values,传递一个元组:df.sort_values(by=('std', 'Happiness Score'), axis=0)             mean             std  Happiness Score Happiness Score0               5               01               3               34               2               43               3               52               7               9我认为您的想法是正确的,但是元组的顺序不正确。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python