2015-05-19 26 views
25

mam df tak:Python Pandy: grupa według grupy i średnia?

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

chciałbym obliczyć średnią czasu za org za klastra.

Oczekiwany wynik:

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

Nie wiem, jak to zrobić w Pandy, może ktoś pomóc?

+0

Niestety ty chcąc 'df.groupby ([ 'org', 'klaster']) oznaczają()'? nie jest to znaczące dla twojego zestawu danych, w przeciwieństwie do tego: 'df.groupby (['cluster', 'org']). mean()' – EdChum

+0

@EdChum dzięki za twoją pomoc, ale ja nie chcę żadnego z nich. Ale "średnia średnich czasów na org". Proszę zobaczyć oczekiwany wynik (edytowany) – UserYmY

Odpowiedz

41

Jeśli chcesz najpierw wziąć znaczy na ['cluster', 'org'] połączeniu, a następnie ponownie podjąć myśli na cluster grup

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 

Jeśli wa średnie wartości przez cluster tylko, a następnie można

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

Można groupby na ['cluster', 'org'], a następnie podjąć 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

Ale chcę jedną liczbę na klastrze (średnia dla przeciętnego czasu na org). Tak więc wynik jest tylko klastrem i średnim czasem – UserYmY

+0

Pewnie zmieniłem pytanie – UserYmY

+0

, dodałem to. Tak więc dla pierwszego klastra najpierw uśredniłem grupy, a następnie ogólną średnią – UserYmY

1

ja po prostu to zrobić, co dosłownie co następuje pożądany logika.

df.groupby(['org']).mean().groupby(['cluster']).mean()