You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对Pandas DataFrame按两列整体排序而非先后排序?

问题:按两列z-Score的最大值排序DataFrame

原始DataFrame

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

需求

需要将上述DataFrame按最后两列(Num. z-Score、Vol. z-Score)中任意一列的最大值排序:每行取这两个z-Score的最大值,按该值降序排列,不优先指定某一列。

现有方法的局限性

使用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
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

(注:原目标结果中PQR的Vol. z-Score存在笔误,此处修正为原始数据的1.43以保证逻辑自洽)


解决方案

核心思路是先计算每行两个z-Score的最大值,再以此为依据排序:

# 1. 新增临时列存储每行两个z-Score的最大值
df['max_z_score'] = df[['Num. z-Score', 'Vol. z-Score']].max(axis=1)

# 2. 按最大值降序排序,排序后删除临时列
df_sorted = df.sort_values('max_z_score', ascending=False).drop('max_z_score', axis=1)

# 查看最终结果
print(df_sorted)

说明

  • max(axis=1)用于按行计算指定列的最大值,确保每行的排序依据是两列z-Score中的较大值
  • 排序完成后通过drop()删除临时列,保持结果DataFrame的结构与原始一致

内容的提问来源于stack exchange,提问作者vicefreak04

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:05:22