2016-01-04 115 views
3

我已經通過其他數據框創建具有多指標一個數據幀:排序大熊貓多指標

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描述這工作得很好。

在本文檔中也說,標籤需要在「有必要與多指標有序性」,以進行分類索引和切片功能的正確工作。

但不知何故

multindexed_df.sort_index(level=0) 

multindexed_df.sort_index(level='bus_uid') 

不工作了,並拋出類型錯誤:sort_index()得到了一個意想不到的關鍵字參數 '級別'

sort_index()尋找對象的信息看起來「通過」的是我的新朋友,而不是「水平」的:

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. 

我的問題是:我如何可以排序我的多指標所有的功能(切片等)都能正常工作?

回答

4

答案取決於你正在使用的版本大熊貓。隨着最新的大熊貓(> = 0.17.0或更新版本),你的確可以使用level關鍵字指定到多指標的哪個級別進行排序:

df = df.sort_index(level=0) 

但是,如果你有一箇舊的大熊貓( < 0.17.0或更新版本),這level關鍵字尚未公佈,但可以使用sortlevel方法:

df = df.sortlevel(level=0) 

但要注意的是,如果你想排序各級,喲你不需要指定level關鍵字,你可以這樣做:

df = df.sort_index() 

這將爲雙方近期和較舊版本的大熊貓的工作。


這些變化的排序API中的摘要,請參閱http://pandas.pydata.org/pandas-docs/stable/whatsnew.html#changes-to-sorting-api

+0

我的錯!我正在研究版本0.16.2,現在更新到0.17.1。那麼只要應用* multindex_df.sort_index(inplace = True)*就足以獲得所有功能了? 謝謝!從有序索引 –

+0

切片現在彈出一個錯誤:1. 「IDX = pd.IndexSlice」 2「的子集= multindex_df.loc [IDX [[ 'EL:DE22C'],[ 'EL'],[ '輸入' ]:,:]]「帶來的‘’KeyError異常:‘多指標分層要求該指數是完全lexsorted元組LEN(5),lexsort深度(0)’」 –

+0

我再一次錯,我忘了排序重建後的指數; )非常感謝你! –