【问题标题】:Order dataframe by row按行排序数据帧
【发布时间】:2017-04-19 05:10:30
【问题描述】:

假设我有以下数据框

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

如何订购我的数据框:

卡尔、玛丽、鲍勃、约翰、詹姆斯

以一种有效的方式?

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

【问题讨论】:

  • 了解.sort_values() 方法或.sort_index(),具体取决于您的目标...
  • 那是什么样的排序?随意的?如果有,您是否将它们放在列表或类似集合中?
  • 是的,请参考更新后的问题

标签: python pandas


【解决方案1】:

定义您的订单

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

时间测试

【讨论】:

    【解决方案2】:

    您可以使用loc 任意订购它们(假设您的数据在df 中)

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

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

    df.sort_values(by='C1')
    

    或者更高级的是按自定义键功能排序。看到这个问题:pandas sort lambda function

    【讨论】:

      猜你喜欢
      • 2012-06-26
      • 1970-01-01
      • 2018-02-05
      • 2019-04-26
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      • 2017-06-30
      • 1970-01-01
      相关资源
      最近更新 更多