Pandas -> DataFrame -> 按价格排名

Pandas -> DataFrame -> rank by price

我有 DataFrame,我试图在其中添加一个新的“等级”列,以通过比较价格('price' 列)来确定相对于“名称”和“国家/地区”列的价格评级。 如果一个产品的价格相同,当使用

df['rank'] = df.groupby('name')['price'].apply(lambda x: x.sort_values().rank())

我得到以下结果 -> 'rank' 列,但我需要得到 'rank_2' 中突出显示的那个,它不准确,因为这六种产品的价格相同并且应该得到 1 的评级。如何获得列中的给定结果 -> 'rank_2'。 请帮忙,我将不胜感激

你必须select排名函数中的排名方法,像这样:

df['rank'] = df.groupby('name')['price'].apply(lambda x: x.sort_values().rank(method="dense"))

如果我理解正确的话:

您可以使用:

df['rank'] = df.sort_values(by=['name', 'price']).groupby(['name'])[['price']].apply(lambda x: x!= x.shift()).cumsum()

df['rank'] = df.sort_values(by=['name', 'price']).groupby('name')['price'].apply(lambda x: x.rank(method="dense"))

两种情况下的输出:

     name country  price  rank
0  S00123     mal    3.5   1.0
1  S00123     fra    3.5   1.0
2  S00123     spa    3.5   1.0
3  S00123     pur    3.5   1.0
4  S00123     rom    3.5   1.0
5  S00123     slo    3.5   1.0
6  S00123     jap    7.0   2.0
7  S00123     can    8.5   3.0
8  S00123     bra    8.5   3.0
9  S00123     ind   10.0   4.0