我有一个df,里面有不同的商家、产品和人气排名,大小不一。
<表类>
商人
产品
等级
tbody><<tr>商人1 苹果 1 商人1 香蕉 2 商人1 芒果 3 商人1 葡萄 4 商人1 猕猴桃 5 商人2 橙色 1 商人2 苹果 2 商人2 香蕉 3 商人2 葡萄 4 商人3 芒果 1 商人3 葡萄 2 商人3 橙色 3 表类>
您可以使用:
products = ['apple', 'banana', 'orange']
out = (df
.groupby('Merchant', as_index=False)
.agg(**{'Adjusted Rank': ('Product', lambda s: s.isin(products).cummin().sum()+1)})
)
输出:
Merchant Adjusted Rank
0 Merchant 1 3
1 Merchant 2 4
2 Merchant 3 1
= 2:
out['Rank'] = out['Adjusted Rank'].where(out['Adjusted Rank'].gt(2), 1)