2015-05-19 9 views
25

Ho un df come questo:Panda Python: raggruppa per in gruppo per e in media?

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

vorrei calcolare la media di tempo per ogni org per cluster.

Risultato atteso:

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

non so come farlo in Pandas, chiunque può aiutare?

+0

Spiacente Sei voler 'df.groupby ([ 'org', 'grappolo']) significa()'? questo non è così significativo per il set di dati al contrario di questo: 'df.groupby (['cluster', 'org']). mean()' – EdChum

+0

@EdChum grazie per il vostro aiuto, ma non voglio che siano nessuno di loro. Ma la "media dei tempi medi per org". Si prega di vedere il risultato previsto (modificato) – UserYmY

risposta

41

Se si vuole prendere la prima significa su ['cluster', 'org'] combinazione e poi di nuovo prendere significare il cluster gruppi

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 

Se wan't valori medi da cluster solo, allora si potrebbe

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

È possibile groupby su ['cluster', 'org'] e quindi prendere 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

Ma voglio un numero per cluster (media della media di tempo per org). Quindi il risultato è solo cluster e tempo medio – UserYmY

+0

Sicuro di aver modificato la domanda – UserYmY

+0

certo, l'ho aggiunto. Quindi per il cluster uno, ho prima mediato i gruppi e poi la media complessiva – UserYmY

1

vorrei semplicemente fare questo, che segue alla lettera quello che la logica desiderata era:.

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