2015-12-16 36 views
6

Tôi có một DataFrame trông như thế này:Pandas groupby với bin đếm

+----------+---------+-------+ 
| username | post_id | views | 
+----------+---------+-------+ 
| john  |  1 |  3 | 
| john  |  2 | 23 | 
| john  |  3 | 44 | 
| john  |  4 | 82 | 
| jane  |  7 |  5 | 
| jane  |  8 | 25 | 
| jane  |  9 | 46 | 
| jane  |  10 | 56 | 
+----------+---------+-------+ 

và tôi muốn biến nó để đếm xem thuộc về thùng nào đó như thế này:

+------+------+-------+-------+--------+ 
|  | 1-10 | 11-25 | 25-50 | 51-100 | 
+------+------+-------+-------+--------+ 
| john | 1 |  1 |  1 |  1 | 
| jane | 1 |  1 |  1 |  1 | 
+------+------+-------+-------+--------+ 

tôi đã thử:

bins = [1, 10, 25, 50, 100] 
groups = df.groupby(pd.cut(df.views, bins)) 
groups.username.count() 

Nhưng nó chỉ cung cấp số lượng tổng hợp và không được tính bởi người dùng. Làm thế nào tôi có thể nhận được số lượng người dùng đếm?

Các đếm tổng hợp (sử dụng dữ liệu thực tế của tôi) trông như thế này:

impressions 
(2500, 5000]   2332 
(5000, 10000]  1118 
(10000, 50000]  570 
(50000, 10000000]  14 
Name: username, dtype: int64 

Trả lời

7

Bạn có thể nhóm bằng cả thùng Tên truy nhập, tính toán kích thước nhóm và sau đó sử dụng unstack():

>>> groups = df.groupby(['username', pd.cut(df.views, bins)]) 
>>> groups.size().unstack() 
views  (1, 10] (10, 25] (25, 50] (50, 100] 
username 
jane   1   1   1   1 
john   1   1   1   1 
Các vấn đề liên quan