熊猫:按列的平均值对列进行排序

Ame*_*ina 17 python pandas

我在Pandas中有一个数据帧,我想根据列的平均值(或者例如它们的std值)对其列进行排序(即获取新的数据帧或视图).文档讨论了按标签或值排序,但我在自定义排序方法上找不到任何东西.

我怎样才能做到这一点?

And*_*den 32

您可以使用meanDataFrame方法和Series sort_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
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用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
Run Code Online (Sandbox Code Playgroud)

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

  • 添加到食谱? (8认同)
  • 似乎现在不推荐使用`order`,而应该使用`sort_values`(在版本0.17.0中添加). (3认同)
  • sort_values(ascending=False) 如果您想要降序 (2认同)

小智 8

您可以使用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)
Run Code Online (Sandbox Code Playgroud)