假设我有以下数据框
C1 C2
John 4 3
Bob 5 7
Mary 6 5
Carl 5 6
James 4 3
如何订购我的数据框:
Carl,Mary,Bob,John,James
以有效的方式?
这是一个任意顺序,我可能将名称存储在变量 orderedNames
中答案 0 :(得分: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()
时间测试
答案 1 :(得分:2)
您可以使用loc
进行大规模订购(假设您的数据位于df
)
df.loc[['Carl', 'Mary', 'Bob', 'John', 'James'], :]
但是,如果您想按列的子集对它们进行排序,请使用sort_values
df.sort_values(by='C1')
或者甚至更高级的是按自定义键功能进行排序。请参阅此问题:pandas sort lambda function