2015-05-19 66 views
25

我有這樣一個DF:Python熊貓:按羣組劃分和平均分?

cluster org  time 
    1  a  8 
    1  a  6 
    2  h  34 
    1  c  23 
    2  d  74 
    3  w  6 

我想每個組織每集羣計算的平均時間。

預期結果:

cluster mean(time) 
1  15 ((8+6/2)+23)/2 
2  54 (74+34)/2 
3  6 

我不知道該怎麼做的熊貓,任何人可以幫助?

+0

對不起,你想'df.groupby([ '組織', '羣'])的意思是()'?這對你的數據集來說不是那麼有意義,而不是這個:'df.groupby(['cluster','org'])。mean()' – EdChum

+0

@EdChum感謝你的幫助,但我想要的不是他們。但是「每個組織的平均時間的平均值」。請參閱預期結果(編輯) – UserYmY

回答

41

如果你想先意味着對['cluster', 'org']組合,然後再取平均的cluster

In [59]: (df.groupby(['cluster', 'org'], as_index=False).mean() 
      .groupby('cluster')['time'].mean()) 
Out[59]: 
cluster 
1   15 
2   54 
3   6 
Name: time, dtype: int64 

如果通過cluster wan't平均值而已,那麼你可以

In [58]: df.groupby(['cluster']).mean() 
Out[58]: 
       time 
cluster 
1  12.333333 
2  54.000000 
3   6.000000 

你可以在['cluster', 'org']groupby,然後取mean()

In [57]: df.groupby(['cluster', 'org']).mean() 
Out[57]: 
       time 
cluster org 
1  a 438886 
     c  23 
2  d  9874 
     h  34 
3  w   6 
+0

但我希望每個羣集有一個數字(每個組織的平均時間)。所以結果是隻有羣集和平均時間 – UserYmY

+0

當然,我編輯了問題 – UserYmY

+0

當然,我補充說。因此,對於第一組,我首先對小組進行平均,然後對總體平均數 – UserYmY

1

我只想做到這一點,這從字面上遵循什麼你想要的邏輯是:

df.groupby(['org']).mean().groupby(['cluster']).mean()