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

如何用Pandas实现按水果总数量降序后组内按Rate降序排序?

Pandas实现按分组总数量降序+组内Rate降序排序

首先得处理原始数据里水果名称的大小写问题(比如Banana和banana会被Pandas视为不同分组),再按照你的需求完成排序,下面是完整的实现方案:

步骤1:构造原始数据并标准化水果名称

import pandas as pd

# 还原你的原始DataFrame
data = {
    '水果(Fruit)': ['Apple', 'Apple', 'Apple', 'Mango', 'Mango', 'Banana', 'banana'],
    'Rate': [2, 3, 5, 4, 6, 2, 1],
    '数量(Quantity)': [4, 3, 9, 5, 12, 2, 2]
}
df = pd.DataFrame(data)

# 统一水果名称的大小写,确保Banana和banana被归为同一组
df['水果(Fruit)'] = df['水果(Fruit)'].str.capitalize()

步骤2:添加分组总数量辅助列

我们用groupby + transform实现SQL中子查询关联的效果——把每个水果的总数量映射到该组的每一行:

# 计算每个水果的总数量,并添加为新列
df['总数量'] = df.groupby('水果(Fruit)')['数量(Quantity)'].transform('sum')

步骤3:按需求排序并清理结果

按照总数量降序、组内Rate降序排序,最后可以删除辅助列:

# 执行排序:总数量降序,Rate降序
sorted_df = df.sort_values(by=['总数量', 'Rate'], ascending=[False, False])

# 移除辅助列(如果不需要保留的话)
sorted_df = sorted_df.drop(columns='总数量')

# 查看最终结果
print(sorted_df)

执行后输出的结果和你期望的完全一致:

水果(Fruit)  Rate  数量(Quantity)
4      Mango     6              12
3      Mango     4               5
2       Apple     5               9
1       Apple     3               3
0       Apple     2               4
5      Banana     2               2
6      Banana     1               2

思路对比(和你的SQL实现对应)

  • SQL里通过子查询计算每个水果的总数量再关联回原表;Pandas里用transform直接在原表生成总数量列,逻辑更简洁
  • sort_values的参数by=['总数量', 'Rate']对应SQL里的order by temp.sm desc, fr_table.rate desc,ascending=[False, False]指定两个排序键都为降序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:46:43