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

R语言中如何实现分组后的组内数据排名?

Pandas 按分组排名实现方案

你可以通过pandas原生的分组+排名接口快速实现需求,无需编写自定义遍历逻辑。

实现步骤

  • 调用groupby('order_dates')按订单日期字段拆分数据分组
  • 对每个分组内的Sales in Dollars销售额字段调用rank()方法,指定降序排序规则匹配“销售额越高排名越靠前”的逻辑
  • 将生成的排名序列写入原DataFrame的新列即可

完整可运行代码

import pandas as pd

# 构建示例数据集
df = pd.DataFrame({
    'Sales Rep': ['John', 'John', 'Alex', 'Alex', 'Jeff', 'Jeff'],
    'order_dates': ['2010-11-01', '2008-03-25', '2010-11-01', '2008-03-25', '2010-11-01', '2008-03-25'],
    'Sales in Dollars': [25, 30, 5, 15, 31, 2]
})

# 计算分组排名
df['sales_rank'] = df.groupby('order_dates')['Sales in Dollars'].rank(
    ascending=False,  # 销售额从高到低排序
    method='dense'    # 排名连续不跳号
).astype(int)

print(df)

运行结果

执行代码后输出结果和预期完全一致:

Sales Rep order_dates  Sales in Dollars  sales_rank
0      John  2010-11-01                25           2
1      John  2008-03-25                30           1
2      Alex  2010-11-01                 5           3
3      Alex  2008-03-25                15           2
4      Jeff  2010-11-01                31           1
5      Jeff  2008-03-25                 2           3
  • 2010-11-01分组:Jeff(31美元)排第1,John(25美元)排第2,Alex(5美元)排第3
  • 2008-03-25分组:John(30美元)排第1,Alex(15美元)排第2,Jeff(2美元)排第3

补充说明

如果后续遇到同分组内销售额相同的场景,可以调整method参数适配不同排名规则:

  • method='min':并列人员共享最高排名,后续排名跳号,例如两个第1名之后直接为第3名
  • method='dense':并列人员共享相同排名,后续排名连续不跳号,例如两个第1名之后为第2名
  • method='first':按数据在原表中的出现顺序给并列值分配连续排名,不出现并列名次

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 01:01:00