Python Pandas: nhóm theo nhóm và trung bình?


93

Tôi có một khung dữ liệu như thế này:

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

Tôi muốn tính toán thời gian trung bình cho mỗi tổ chức trên mỗi cụm.

Kết quả mong đợi:

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

Tôi không biết làm thế nào để làm điều đó trong Pandas, ai có thể giúp đỡ?


2
Xin lỗi, bạn có muốn df.groupby(['org','cluster']).mean()không? điều này không có ý nghĩa đối với tập dữ liệu của bạn trái ngược với điều này:df.groupby(['cluster','org']).mean()
EdChum

@EdChum cảm ơn sự giúp đỡ của bạn, nhưng tôi không muốn ai trong số họ. Nhưng "số lần trung bình trên mỗi tổ chức". Vui lòng xem kết quả mong đợi (đã chỉnh sửa)
UserYmY

Câu trả lời:


132

Nếu bạn muốn xác định giá trị trước tiên khi kết hợp ['cluster', 'org']và sau đó xác định giá trị trung bình trên clustercác nhóm, bạn có thể sử dụng:

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

Nếu bạn chỉ muốn giá trị trung bình của clustercác nhóm, thì bạn có thể sử dụng:

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

Bạn cũng có thể sử dụng groupbytrên ['cluster', 'org']và sau đó sử dụng 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

Nhưng tôi muốn một số cho mỗi cụm (trung bình của thời gian trung bình cho mỗi tổ chức). Vì vậy, kết quả chỉ là cụm và thời gian trung bình
UserYmY

1
Đầu tiên là những gì tôi cần cảm ơn - có cách nào dễ dàng để thêm một cột trong df chứa các giá trị trung bình này cho cụm hàng không?
Mr_and_Mrs_D

12

Tôi chỉ đơn giản là làm điều này, theo đúng nghĩa đen của logic mong muốn của bạn:

df.groupby(['org']).mean().groupby(['cluster']).mean()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.