我创建了这个df:
## creating multi index multi-level column dataframe
multi_ind = pd.MultiIndex.from_product([['Anna', 'Bob', 'Cara', 'Dan'],['2021', '2022']])
multi_cols = pd.MultiIndex.from_product([['Class XI', 'Class XII'],['Math' , 'Physics', 'Literature']])
data = np.random.randint(20,100, size = (8, 6))
df = pd.DataFrame(data, index =multi_ind, columns = multi_cols)
df.index.names = ['Student','Year']
df.columns.names = ['Class' , 'Subject']
df
我已经使用sort_index()对这个df进行了排序
df.sort_index(level=[0, 1], ascending=[1, 0], inplace=True)
现在,我尝试同时对索引和列进行切片,以创建一个子集。
idx = pd.IndexSlice
df.loc[idx['Bob':'Cara', '2021'], idx['Class XII' , 'Math' : 'Physics'] ]
我一直收到这个错误!
UnsortedIndexError:'MultiIndex切片要求索引为lexsorted:在级别[1]上切片,lexsort深度为1'
part of the error
我尝试切片外部索引和内部列级别,同时为内部索引和外部列级别选择值/值列表,但似乎我没有正确排序df。
我在lex排序中做错了什么?我如何修复UnsortedIndexError?我已经尝试了sort_index()
还有,什么是lexsort?有关于lexsort的简单阅读材料吗?
感谢你的评分
1条答案
按热度按时间fivyi3re1#
如果在列中对Mulitindex进行排序,则运行良好,因为您的代码只在index中对MulitIndex进行排序: