Pandas DataFrame按name、country分组实现同价同排名问题
你的现有代码存在两处不符合需求的问题:
- 分组字段仅指定了
name,没有包含要求的country字段,分组逻辑不匹配需求 rank()方法默认method='average',会对相同值计算平均排名,因此相同价格的商品无法拿到相同的整数排名
要实现相同价格获得相同排名的效果,使用method='min'参数即可,该参数会将相同值的排名统一设为该组值中的最小排名,符合你要的rank_2列效果:
# ascending=True表示价格越低排名越高,如需价格越高排名越高改为ascending=False df['rank_2'] = df.groupby(['name', 'country'])['price'].rank(method='min', ascending=True).astype(int)
如果你需要排名连续不跳号(比如6个排名1的商品后,下一个不同价格的商品排名为2而非7),可将method参数改为'dense'。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

