我有一个DataFrame,看起来像这样:
+----------+---------+-------+
| 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 |
+----------+---------+-------+
我想把它转换成计数属于某些bin的视图,如下所示:
+------+------+-------+-------+--------+
| | 1-10 | 11-25 | 25-50 | 51-100 |
+------+------+-------+-------+--------+
| john | 1 | 1 | 1 | 1 |
| jane | 1 | 1 | 1 | 1 |
+------+------+-------+-------+--------+
我试过:
bins = [1, 10, 25, 50, 100]
groups = df.groupby(pd.cut(df.views, bins))
groups.username.count()
但它只给出了聚合计数,而不是按用户计数。我如何才能按用户获得bin计数?
聚合计数(使用我的真实的数据)如下所示:
impressions
(2500, 5000] 2332
(5000, 10000] 1118
(10000, 50000] 570
(50000, 10000000] 14
Name: username, dtype: int64
2条答案
按热度按时间vyswwuz21#
你可以用bin * 和 * username进行分组,计算组的大小,然后使用
unstack()
:e1xvtsh32#
跨组计数是
pd.crosstab
的一项工作:等效的
pivot_table
也可以工作:使用
rename_axis()
删除索引名称: