【发布时间】:2019-01-18 03:25:21
【问题描述】:
我在 Pandas 中有一个数据框,我想根据其列的平均值(或例如通过它们的标准值)对其列进行排序(即获取新的数据框或视图)。文档谈到了sorting by label or value,但我找不到关于自定义排序方法的任何内容。
我该怎么做?
【问题讨论】:
我在 Pandas 中有一个数据框,我想根据其列的平均值(或例如通过它们的标准值)对其列进行排序(即获取新的数据框或视图)。文档谈到了sorting by label or value,但我找不到关于自定义排序方法的任何内容。
我该怎么做?
【问题讨论】:
你可以使用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版本中添加)。
reindex 而不是reindex_axis,因为它被标记为已弃用并且即将在未来的版本中删除(我使用的是pandas v0.23.4)
您可以使用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)
【讨论】: