获取每个组中前n个最大值

7

我想对以下数据进行分组,每组提取出前两个最大的值。

Brand | Product | Rank
  A   |    P1   |   1000
      |    P2   |   1210
      |    P3   |   2000
      |    P4   |   600
      |    P5   |   756
      |    P6   |   867
  B   |    P1   |   549
      |    P2   |   1572
      |    P3   |   3490
      |    P4   |   2341
      |    P5   |   431
      |    P6   |   321
  C   |    P1   |   421
      |    P2   |   121
      |    P3   |   805
      |    P4   |   1202
      |    P5   |   4032
      |    P6   |   432

我希望能够找出每个组(A,B,C)的前两个最大值。

Top_Products = df.nlargest(2, 'Rank')

然而,这只能隔离出前两个产品。

是否有一种方法可以每个品牌获取前两个产品。

期望输出:

Brand | Product | Rank
  A   |    P3   |   2000
      |    P2   |   1210
  B   |    P3   |   3490
      |    P4   |   2341
  C   |    P5   |   4032
      |    P4   |   1202

谢谢!


这是一个重复的问题,你需要使用groupby和nlargest。 - Vaishali
https://stackoverflow.com/questions/49983957/not-getting-top5-values-for-each-month-using-grouper-and-groupby-in-pandas/49984025#comment86988818_49984025 - BENY
感谢您指引我正确的方向! - Dys_Lexi_A
1个回答

12

这应该能解决问题:

df.groupby('Brand').apply(lambda x: x.nlargest(2, 'Rank')).reset_index(drop=True)  

  Brand Product  Rank
0     A      P3  2000
1     A      P2  1210
2     B      P3  3490
3     B      P4  2341
4     C      P5  4032
5     C      P4  1202

如果您认为您的解决方案足够独特或更加现代化,您应该将其添加到问题中链接的重复内容中。 - wwii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接