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

标签 python pandas

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

                                           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'))

如何解决这个问题?

最佳答案

设置

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 Score
0               5               0
1               3               3
2               7               9
3               3               5
4               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 Score
0               5               0
1               3               3
4               2               4
3               3               5
2               7               9
<小时/>

另一个解决方案是sort_values,传递一个元组:

df.sort_values(by=('std', 'Happiness Score'), axis=0)

             mean             std
  Happiness Score Happiness Score
0               5               0
1               3               3
4               2               4
3               3               5
2               7               9

我认为您的想法是正确的,但元组的顺序不正确。

关于python - 如何使用一个顶级列对多索引 pandas 数据框进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53916158/

相关文章:

python - Pandas :通过两个不同的维度创建数据透视表?

python - 没有名为 Yum 的模块用于安装 mysql db

python - 优化 django admin sql

python - 即使填充了大部分数据也无法插入数据帧

python - 如何从旧数据框创建新数据框?

python - 计算 Pandas 数据框中的单个单词

python - 克服 Facebook 营销 API 中的速率限制

python - 无法使用 pool.apply_async()

python - 解释 "[c for c in cEdges if secString in c[0]]"

python - 将 pandas 数据框转换为具有新键名的字典