2013-05-22 73 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