2015-05-19 2 views
25

У меня есть ДФ, как это:Python Pandas: группа по группам и средним?

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 

Если вы wan't средних значений по cluster только, то вы могли бы

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

Вы могли бы groupby по телефону ['cluster', 'org'], а затем взять 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() 
Смежные вопросы