2017-04-18 48 views
1

假設我有以下數據框訂單數據幀

 C1 C2 
John 4 3 
Bob 5 7 
Mary 6 5 
Carl 5 6 
James 4 3 

如何訂購我的數據框有:

卡爾·瑪麗,鮑勃,約翰,詹姆斯

以高效的方式

這是一個任意排序,我可能會存儲在一個變量orderedNames名稱

+1

閱讀有關'.sort_values()'方法或'.sort_index()'取決於你的目標... – MaxU

+4

什麼樣的排序是?任意?如果是這樣,你有他們在一個列表或類似的集合? – ayhan

+0

是的,請參考最新的問題 – Thegamer23

回答

2

定義排序

arbitrary_ordering = ['Carl', 'Mary', 'Bob', 'John', 'James'] 

選項1
loc

df.loc[arbitrary_ordering] 

選項2
reindex

df.reindex(arbitrary_ordering) 

選項3
reindex_axis

df.reindex_axis(arbitrary_ordering) 

所有得到

 C1 C2 
Carl 5 6 
Mary 6 5 
Bob  5 7 
John 4 3 
James 4 3 

替代1

df.iloc[df.index.to_series().map(arbitrary_ordering.index)] 

替代2
pd.Categorical

df.index = pd.Categorical(df.index, categories=arbitrary_ordering) 
df.sort_index() 

時間測試

enter image description here

2

您可以使用arbirtrarly loc(假設你的數據在df)責令

df.loc[['Carl', 'Mary', 'Bob', 'John', 'James'], :] 

但是,如果要通過列的子集,命令他們使用sort_values

df.sort_values(by='C1') 

甚至更​​高級的將是定製鍵功能排序。看到這個問題:pandas sort lambda function