pandas通过对数据帧的操作进行分组

发布于 2021-01-29 17:40:42

我有一个像下面这样的熊猫数据框。

UsrId   JobNos
 1       4
 1       56
 2       23 
 2       55
 2       41
 2       5
 3       78
 1       25
 3       1

我根据基于UsrId的数据框进行分组。分组的数据框在概念上将如下所示。

UsrId   JobNos
  1    [4,56,25]
  2    [23,55,41,5]
  3    [78,1]

现在,我正在寻找一个内置API,该API将为我提供具有最大作业数的UsrId。对于上面的示例,UsrId-2具有最大计数。

更新: 我想要最大作业数的’n’UserIds,而不是最大作业数的UsrID。对于上面的示例,如果n = 2,则输出为[2,1]。能做到吗?

关注者
0
被浏览
54
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    喜欢的东西df.groupby('UsrId').JobNos.sum().idxmax()应该这样做:

    In [1]: import pandas as pd
    
    In [2]: from StringIO import StringIO
    
    In [3]: data = """UsrId   JobNos
       ...:  1       4
       ...:  1       56
       ...:  2       23 
       ...:  2       55
       ...:  2       41
       ...:  2       5
       ...:  3       78
       ...:  1       25
       ...:  3       1"""
    
    In [4]: df = pd.read_csv(StringIO(data), sep='\s+')
    
    In [5]: grouped = df.groupby('UsrId')
    
    In [6]: grouped.JobNos.sum()
    Out[6]: 
    UsrId
    1         85
    2        124
    3         79
    Name: JobNos
    
    In [7]: grouped.JobNos.sum().idxmax()
    Out[7]: 2
    

    如果要根据每个组中的项目数获得结果:

    In [8]: grouped.size()
    Out[8]: 
    UsrId
    1        3
    2        4
    3        2
    
    In [9]: grouped.size().idxmax()
    Out[9]: 2
    

    更新: 要获得有序结果,可以使用以下.order方法:

    In [10]: grouped.JobNos.sum().order(ascending=False)
    Out[10]: 
    UsrId
    2        124
    1         85
    3         79
    Name: JobNos
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看