2013-05-22 37 views
5

Aşağıdaki gibi bir panda veri karteğim var.Pandalar grubu veri çerçevesindeki işlemlere göre

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

Veritabanına göre UsrId temel alınarak gruplandırıyorum. Gruplanmış veri çerçevesi kavramsal olarak aşağıdakine benzeyecektir.

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

Şimdi, maksimum iş sayısı ile bana UsrId verecek bir inşa API arıyorum. Yukarıdaki örnekte, UsrId-2 maksimum sayıma sahiptir.

GÜNCELLEME: Yerine maksimum iş sayısı ile UsrID ait yüzden maksimum iş sayıları ile 'n' userids istiyorum. Yukarıdaki örnek için, n = 2 ise çıkış [2,1]. Bu yapılabilir mi?

cevap

10

df.groupby('UsrId').JobNos.sum().idxmax() gibi bir şey yapmak gerekir:

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 

her gruptaki öğe sayısına dayanarak sonuçlarınızı isterseniz:

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

In [9]: grouped.size().idxmax() 
Out[9]: 2 

Güncelleme: yapabilirsiniz sipariş almak için sonuçlar .order yöntemini kullanın:

+0

çözüm için teşekkürler. İşe yarıyor. Sorumu güncelledim. Güncellenmiş soruya bir göz atabilir ve bir çözüm önerebilir misiniz? –

+0

@AnirudhNair - güncellendi ... – root

İlgili konular