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
我有 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