首页 > 解决方案 > Pandas nlargest plus 始终包含“X”

问题描述

我正在尝试创建一个图表,其中列出了前 4 个品牌,加上我所代表的品牌(“X”),按他们所有产品排名的总和。

下面是 3 个品牌的示例以及数据的样子(我的数据集中有 300 多个品牌)。

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

如何根据产品排名的总和选择前 4 个品牌,然后始终包括我的品牌,品牌“X”?

另外,如果我的品牌在前 4 个品牌中,我该如何选择前 5 个品牌,以便在每个图表中都有 5 个品牌的常数?

谢谢!

标签: pythonpandas

解决方案


你可以这样做pd.concat

n=2# input the number you need 
x='A' # input the brand you want to keep 
pd.concat([df.sum(level=0).sort_values('Rank',ascending=False).head(2),df.sum(level=0).loc[[x]]]).max(level=0)
Out[456]: 
       Rank
Brand      
B      8704
C      7013
A      6433

推荐阅读