[英]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.