逐行订购数据

时间:2017-04-18 20:45:27

标签: python pandas

假设我有以下数据框

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

如何订购我的数据框:

Carl,Mary,Bob,John,James

以有效的方式?

这是一个任意顺序,我可能将名称存储在变量 orderedNames

2 个答案:

答案 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()

时间测试

enter image description here

答案 1 :(得分:2)

您可以使用loc进行大规模订购(假设您的数据位于df

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

但是,如果您想按列的子集对它们进行排序,请使用sort_values

df.sort_values(by='C1')

或者甚至更高级的是按自定义键功能进行排序。请参阅此问题:pandas sort lambda function