簡體   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