假设我有一个数据帧df
,如下所示:
Client Number (#) Volume ($) Num. z-Score Vol. z-Score
0 ABC 63 131.22 1.17 0.68
1 DEF 44 98.71 2.68 1.35
2 JKL 17 64.15 0.45 0.57
3 PQR 75 180.47 0.88 1.43
4 XYZ 28 75.93 0.23 3.96
我想对它进行排序,使最后两列中任意一列的最大值显示为第一行。由于z-Score跟踪SD与平均值的偏差,我正在寻找我的两个指标(数量、体积(中任何一个的最大偏差,我宁愿不优先考虑它们。
例如,我使用的当前方法:df.sort_values(['Num. z-Score','Vol. z-Score'], ascending=False)
是有区别的,因为它首先按'Num. z-Score'
排序,并且只有在有任何相等值的情况下才会查看'Vol. z-Score'
。
我该如何对列进行排序,以使最终结果如下所示:
Client Number (#) Volume ($) Num. z-Score Vol. z-Score
4 XYZ 28 75.93 0.23 3.96
1 DEF 44 98.71 2.68 1.35
0 ABC 63 131.22 1.17 0.68
3 PQR 75 180.47 0.88 1.03
2 JKL 17 64.15 0.45 0.57
如有任何帮助,我们将不胜感激:(
使用DataFrame.sort_index
,两列最大值为:
df = df.sort_index(key=df[['Vol. z-Score','Num. z-Score']].max(axis=1).get, ascending=False)
print (df)
Client Number (#) Volume ($) Num. z-Score Vol. z-Score
4 XYZ 28 75.93 0.23 3.96
1 DEF 44 98.71 2.68 1.35
3 PQR 75 180.47 0.88 1.43
0 ABC 63 131.22 1.17 0.68
2 JKL 17 64.15 0.45 0.57
Series.argsort
和负值按降序排列的替代解决方案:
df = df.iloc[(-df[['Vol. z-Score','Num. z-Score']].max(axis=1)).argsort()]
print (df)
Client Number (#) Volume ($) Num. z-Score Vol. z-Score
4 XYZ 28 75.93 0.23 3.96
1 DEF 44 98.71 2.68 1.35
3 PQR 75 180.47 0.88 1.43
0 ABC 63 131.22 1.17 0.68
2 JKL 17 64.15 0.45 0.57
看起来您正试图找到'Num。z-Score和Vol。z-Score’。
df['max_value'] = df[['Num. z-Score','Vol. z-Score']].max(axis=1)
df.sort_values(['max_value'], ascending=False)