2017-04-18 51 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