pandas通过对数据帧的操作进行分组
我有一个像下面这样的熊猫数据框。
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]。能做到吗?
-
喜欢的东西
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