如何在Pandas DataFrame中按分组新增price对应的rank排名列
Pandas 分组排名解决方案
直接用Pandas内置的groupby + rank组合即可实现需求,核心代码如下:df['rank'] = df.groupby(['name', 'country'])['price'].rank(ascending=False, method='min').astype(int)
参数说明
ascending=False:代表价格越高排名越靠前,若需要价格越低排名越靠前,修改为True即可method='min':相同价格的条目排名一致,下一个名次跳空(如两个第1名,下一个名次为3),可根据需求调整method取值:- 要同值同排名、名次连续不跳空,使用
method='dense' - 要同值按出现顺序分配不同排名,使用
method='first'
- 要同值同排名、名次连续不跳空,使用
完整可运行示例
import pandas as pd # 示例数据,可替换为你自己的DataFrame data = { 'name': ['商品1', '商品1', '商品2', '商品2', '商品1', '商品2'], 'country': ['中国', '中国', '美国', '美国', '美国', '美国'], 'price': [299, 199, 399, 399, 499, 299] } df = pd.DataFrame(data) # 计算分组排名 df['rank'] = df.groupby(['name', 'country'])['price'].rank(ascending=False, method='min').astype(int) # 输出结果 print(df)
运行输出示例
| name | country | price | rank |
|---|---|---|---|
| 商品1 | 中国 | 299 | 1 |
| 商品1 | 中国 | 199 | 2 |
| 商品2 | 美国 | 399 | 1 |
| 商品2 | 美国 | 399 | 1 |
| 商品1 | 美国 | 499 | 1 |
| 商品2 | 美国 | 299 | 3 |
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

