Python Pandas : group by in group by and average?

I have a dataframe like this:

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

I would like to calculate the average of time per org per cluster.

Expected result:

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

I do not know how to do it in Pandas, can anybody help?

If you want to first take mean on ['cluster', 'org'] combination and then again take mean on cluster groups

    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

If you wan't mean values by cluster only, then you could

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

You could groupby on ['cluster', 'org'] and then take 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

From: stackoverflow.com/q/30328646

Back to homepage or read more recommendations: