繁体   English   中英

对 Pandas MultiIndex 进行排序

[英]Sort pandas MultiIndex

我使用另一个 Dataframe 创建了一个带有 MultiIndex 的 Dataframe:

arrays = [df['bus_uid'], df['bus_type'], df['type'],
          df['obj_uid'], df['datetime']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['bus_uid', 'bus_type', 'type',
                                                 'obj_uid', 'datetime'])
multindex_df = pd.DataFrame(df['val'].values, index=index)

这工作正常,如文档http://pandas.pydata.org/pandas-docs/stable/advanced.html 中所述

在文档中,它还表示需要对标签进行排序,以便在“使用 MultiIndex 进行排序的需要”下索引和切片功能的正确工作。

但不知何故

multindexed_df.sort_index(level=0)

或者

multindexed_df.sort_index(level='bus_uid')

不再工作并抛出TypeError: sort_index() got an unexpected keyword argument 'level'

sort_index()上查找对象信息它看起来像“by”是我的新朋友而不是“levels”:

by:object
  Column name(s) in frame. Accepts a column name or a list for a nested sort. A tuple will be interpreted as the levels of a multi-index.

我的问题如下:如何对我的 MultiIndex 进行排序,以便所有功能(切片等)都能正常工作?

答案取决于您正在使用的 Pandas 版本。 使用最新的 pandas (>= 0.17.0) ,确实可以使用level关键字来指定对多索引的哪个级别进行排序:

df = df.sort_index(level=0)

但是,如果您有一个较旧的 pandas (< 0.17.0) ,则此level关键字尚不可用,但您可以使用sortlevel方法:

df = df.sortlevel(level=0)

但请注意,如果要对所有 level进行排序,则不需要指定level关键字,您可以这样做:

df = df.sort_index()

这适用于最新版本和旧版本的熊猫。


有关排序 API 中这些更改的摘要,请参阅http://pandas.pydata.org/pandas-docs/stable/whatsnew.html#changes-to-sorting-api

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM