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.