2013-05-22 70 views
5

我有一个像下面这样的熊猫数据框。熊猫集团在数据框上的操作

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,它能够为我提供最大工作数的UsrId。对于上面的例子,UsrId-2具有最大数量。

更新: 取而代之的是具有最大作业计数的UsrID,我想'n'UserIds具有最大的作业数量。对于上面的例子,如果n = 2,那么输出是[2,1]。这可以做到吗?

回答

10

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 
+0

感谢您的解决方案。有用。我更新了我的问题。你可以看看并提出一个更新问题的解决方案。 –

+0

@AirirhNair - 更新中...... – root