Did*_*ier 2 python sorting dataframe multi-level pandas
我正在尝试对多级索引中的数据进行排序以进行可视化。此时纯粹是根据值对数据进行排序
我尝试过使用 sort_index 和 sort_values,但是两者都不起作用。我假设有一种方法可以将我不清楚的两者结合起来。
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)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我想看到的是根据 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
Run Code Online (Sandbox Code Playgroud)
欢迎任何想法或建议。
谢谢你!
对于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
Run Code Online (Sandbox Code Playgroud)
对于较低版本的 pandas 是必要的DataFrame.reset_index
,排序然后DataFrame.set_index
:
df = (df.reset_index()
.sort_values(['lev1','col2'], ascending=[True, False])
.set_index(['lev1','lev2']))
Run Code Online (Sandbox Code Playgroud)