【问题标题】:Pandas: Sorting columns by their mean valuePandas:按平均值对列进行排序
【发布时间】:2019-01-18 03:25:21
【问题描述】:

我在 Pandas 中有一个数据框,我想根据其列的平均值(或例如通过它们的标准值)对其列进行排序(即获取新的数据框或视图)。文档谈到了sorting by label or value,但我找不到关于自定义排序方法的任何内容。

我该怎么做?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你可以使用meanDataFrame方法和Seriessort_values方法:

    In [11]: df = pd.DataFrame(np.random.randn(4,4), columns=list('ABCD'))
    
    In [12]: df
    Out[12]:
              A         B         C         D
    0  0.933069  1.432486  0.288637 -1.867853
    1 -0.455952 -0.725268  0.339908  1.318175
    2 -0.894331  0.573868  1.116137  0.508845
    3  0.661572  0.819360 -0.527327 -0.925478
    
    In [13]: df.mean()
    Out[13]:
    A    0.061089
    B    0.525112
    C    0.304339
    D   -0.241578
    dtype: float64
    
    In [14]: df.mean().sort_values()
    Out[14]:
    D   -0.241578
    A    0.061089
    C    0.304339
    B    0.525112
    dtype: float64
    

    然后您可以使用reindex 对列重新排序:

    In [15]: df.reindex(df.mean().sort_values().index, axis=1)
    Out[15]:
              D         A         C         B
    0 -1.867853  0.933069  0.288637  1.432486
    1  1.318175 -0.455952  0.339908 -0.725268
    2  0.508845 -0.894331  1.116137  0.573868
    3 -0.925478  0.661572 -0.527327  0.819360
    

    注意:在早期版本的 pandas 中,sort_values 曾经是 order,但 order 作为 0.17 的一部分已被弃用,以便与其他排序方法更加一致。此外,在早期版本中,必须使用reindex_axis 而不是reindex。

    【讨论】:

    • 看来order现在已经被弃用了,应该改用sort_values(0.17.0版本中添加)。
    • @bli 谢谢!我真的需要编写一个脚本来更新我所有的熊猫答案(我怀疑有几百个可以用更新来做)......
    • sort_values(ascending=False) 如果您想要降序排列
    • 我也推荐使用reindex 而不是reindex_axis,因为它被标记为已弃用并且即将在未来的版本中删除(我使用的是pandas v0.23.4)
    • 谢谢@dvitsios,我用你的建议更新了这个答案!
    【解决方案2】:

    您可以使用assign 创建一个变量,使用它对值进行排序并将其放在同一行代码中。

    df = pd.DataFrame(np.random.randn(4,4), columns=list('ABCD'))
    df.assign(m=df.mean(axis=1)).sort_values('m').drop('m', axis=1)
    

    【讨论】:

      猜你喜欢
      • 2019-04-02
      • 1970-01-01
      • 2017-04-28
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 2023-04-03
      相关资源
      最近更新 更多