Python Pandas: raggruppa per gruppo per e media?


93

Ho un dataframe come questo:

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 del tempo per organizzazione 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 Panda, qualcuno può aiutare?


2
Scusa vuoi df.groupby(['org','cluster']).mean()? questo non è così significativo per il tuo set di dati al contrario di questo:df.groupby(['cluster','org']).mean()
— EdChum

@EdChum grazie per il tuo aiuto, ma io non voglio nessuno di loro. Ma la "media dei tempi medi per organizzazione". Si prega di vedere il risultato atteso (modificato)
— UserYmY

Risposte:


133

Se vuoi prima prendere la media sulla combinazione di ['cluster', 'org']e poi prendere la media sui clustergruppi, puoi usare:

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 vuoi solo la media dei clustergruppi, puoi usare:

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

È inoltre possibile utilizzare groupbysu ['cluster', 'org']e quindi utilizzare 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

Ma voglio un numero per cluster (media del tempo medio per organizzazione). Quindi il risultato è solo cluster e tempo medio
— UserYmY

1
Il primo è ciò di cui avevo bisogno, grazie: esiste un modo semplice per aggiungere una colonna nel df contenente questi valori medi per il cluster di righe?
— Mr_and_Mrs_D

12

Lo farei semplicemente, che segue letteralmente quella che era la tua logica desiderata:

df.groupby(['org']).mean().groupby(['cluster']).mean()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.