gpt4 book ai didi

python - 多索引数据帧的索引排序顺序不遵守分类索引顺序

转载 作者:太空宇宙 更新时间:2023-11-04 04:47:04 25 4
gpt4 key购买 nike

具有两级多索引和一列的小型数据框。索引的第二列(级别 1)将按字母顺序排序,将“四”放在“三”之前。

import pandas as pd
df = pd.DataFrame({'A':[1,1,2,2],
'B':['One','Two','Three', 'Four'],
'X':[1,2,3,4]},
index=range(4)).set_index(['A','B']).sort_index()
df

X
A B
1 One 1
Two 2
2 Four 4
Three 3

很明显,第二级索引 (B) 是按字母顺序排列的,因此可以将其替换为分类索引以强制正确排序。

df.index.set_levels(pd.CategoricalIndex(df.index.levels[1], 
categories=['One','Two','Three', 'Four'], ordered=True),
level=1, inplace=True)

完成后检查索引显示级别 1 确实是分类索引。但是对索引进行排序不会将行置于所需的顺序中。

df.sort_index()

X
A B
1 One 1
Two 2
2 Four 4
Three 3

注意:如果数据框有一个简单的 1 级索引,那么这只会按预期工作。

最佳答案

我设法通过在创建数据框后设置索引来实现这一点 - 不确定这是否是最佳答案,但这是一个答案:

df = pd.DataFrame({'A':[1,1,2,2],
'B':['One','Two','Three', 'Four'],
'X':[1,2,3,4]})
df = df.set_index(['A', pd.CategoricalIndex(df['B'], categories=['One','Two','Three', 'Four'], ordered=True)])
del df['B']

关于python - 多索引数据帧的索引排序顺序不遵守分类索引顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49318345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com