【问题标题】:Pandas groupby with bin counts带有 bin 计数的 Pandas groupby
【发布时间】:2016-03-22 21:24:28
【问题描述】:

我有一个如下所示的 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

【问题讨论】:

    标签: python pandas dataframe pandas-groupby


    【解决方案1】:

    您可以按 bin 用户名进行分组,计算组大小,然后使用 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
    

    【讨论】:

      猜你喜欢
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 2021-10-02
      • 2017-09-14
      • 2016-05-24
      相关资源
      最近更新 更多