【问题标题】:Pandas: groupby and return mean value of a non-numeric variable熊猫:分组并返回非数字变量的平均值
【发布时间】:2015-07-15 20:51:48
【问题描述】:

我正在尝试按访问者 ID 和访问过的页面对网站的访问者进行的每个页面的平均访问次数进行汇总。

在下面的示例数据中,unique_visit 是个人访问,visitor_id 是访问者,page 是他们访问的页面。

我想计算以下内容:访问者 009903 访问了 3ghtr 页面 3 次,4ifac 页面访问了 1 次,9fgvb 页面访问了 9 次。因此,访问者 009903 的平均页面访问量为 x。并为每位访客执行此操作。

我的目标是返回一个聚合的 DataFrame / Series,其中第 1 列是 visitor_id,第 2 列是一个平均数,即“int64”。

unique_visit   visitor_id   page    time
6789988        009903       4ifac   07:01
1978678        001068       9fgvb   11:04
7179832        001624       3ghtr   21:22
4567891        001068       4ifac   16:57
2374852        009903       3ghtr   14:39
2179435        001624       4ifac   21:02
3449855        009903       3ghtr   13:23
6789870        009903       9fgvb   09:34
3439455        009903       3ghtr   14:51

【问题讨论】:

  • 所以你想计算每个visitor_id和每个页面的访问次数(所以行)?
  • 009903 3 的平均值是多少
  • 我认为 OP 是在询问 visitor_id 的唯一页面访问次数
  • 用户 009903 访问页面 3ghtr 两次,所以总数是 3 而不是 4
  • @EdChum,是的,我一评论就看到了,我读错了数据。

标签: python pandas


【解决方案1】:

您可以先统计每个访问者/每个页面的访问次数(使用 groupby):

In [11]: df.groupby(['visitor_id', 'page'])['unique_visit'].count()
Out[11]:
visitor_id  page
1068        4ifac    1
            9fgvb    1
1624        3ghtr    1
            4ifac    1
9903        3ghtr    3
            4ifac    1
            9fgvb    1
Name: unique_visit, dtype: int64

由此,您可以获取每位访问者所有页面(索引的第二级)的平均值:

In [13]: df.groupby(['visitor_id', 'page'])['unique_visit'].count().mean(level=0)
Out[13]:
visitor_id
1068    1.000000
1624    1.000000
9903    1.666667
Name: unique_visit, dtype: float64

【讨论】:

    猜你喜欢
    • 2018-02-01
    • 2022-08-16
    • 2016-03-03
    • 2018-12-21
    • 1970-01-01
    • 2020-04-20
    • 2019-09-20
    • 2015-09-11
    相关资源
    最近更新 更多