【问题标题】:How to sort multilevel index on column values如何对列值的多级索引进行排序
【发布时间】:2019-05-20 11:34:12
【问题描述】:

我正在尝试对多级索引中的数据进行排序以进行可视化。 此时纯粹是根据值对数据进行排序

我尝试过使用 sort_index 和 sort_values,但都没有奏效。 我假设有一种方法可以将我不清楚的 2 结合起来。

示例代码

import pandas as pd

data = {'lev1':[1,1,2,2], 
        'lev2':['item1', 'item2', 'item3', 'item2'], 
        'col1':[.55, .44, .22, .34],
        'col2':[.54, .86, .55, .44]}

df = pd.DataFrame(data=data)
df.set_index(['lev1', 'lev2'], inplace=True)

这应该会导致:

                col1    col2
    lev1 lev2       
    1   item1   0.55    0.54
        item2   0.44    0.86
    2   item3   0.22    0.55
        item2   0.34    0.44

我希望看到的是根据 col2 中的值排序的输出。但是,保持多级索引不变。

意思是,结果应该显示:

                col1    col2
    lev1 lev2       
    1   item2   0.44    0.86
        item1   0.55    0.54
    2   item3   0.22    0.55
        item2   0.34    0.44

欢迎任何想法或建议。

谢谢!

【问题讨论】:

标签: python pandas sorting dataframe multi-level


【解决方案1】:

对于 pandas 0.23+ 可以按索引和按DataFrame.sort_values 的列排序:

df = df.sort_values(['lev1','col2'], ascending=[True, False])
print (df)
            col1  col2
lev1 lev2             
1    item2  0.44  0.86
     item1  0.55  0.54
2    item3  0.22  0.55
     item2  0.34  0.44

对于较低版本的pandas是必要的DataFrame.reset_index,排序然后DataFrame.set_index

df = (df.reset_index()
        .sort_values(['lev1','col2'], ascending=[True, False])
        .set_index(['lev1','lev2']))

【讨论】:

    猜你喜欢
    • 2019-06-29
    • 2023-03-05
    • 2021-02-13
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    相关资源
    最近更新 更多