2015-05-19 71 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()