我试图计算用户在同一会话中查看页面的次数
我从一个数据框开始,列出用户ID和他们访问过的页面段塞:
user_id page_view_page_slug
1 slug1
1 slug2
1 slug3
1 slug4
2 slug5
2 slug3
2 slug2
2 slug1
我希望得到的是一个数据透视表,它计算slug横截面的用户ID
我意识到当我们看到slug1和slug2与slug2和slug1时,这将是相同的数据反映,但我想不出更好的方法。 到目前为止,我已经做了一个列表
def listagg(df, grouping_idx):
return df.groupby(grouping_idx).agg(list)
new_df = listagg(df,'user_id')
返回:
page_view_page_slug
user_id
1 [slug1, slug2, slug3, slug4]
2 [slug5, slug3, slug2, slug2]
7 [slug6, slug4, slug7]
9 [slug3, slug5, slug1]
但我很难想到当项目同时出现在一个列表中时(不管顺序如何)循环计数,以及如何存储它。然后我也不知道如何将其转换为可透视格式
让我们试试
groupby
和reduce
:详细信息:
^{} 在
user_id
上的数据帧,然后为page_view_page_slug
中的每个组创建一个邻接数据帧,其索引和列对应于该组中的slugs
现在^{} 使用带有可选参数} 来计算上述邻接数据帧,以便计算段塞横截面的用户id
fill_value=0
的缩减函数^{可选地您可以将上述代码包装到函数中,如下所示:
让我们对具有
merge
和pd.crosstab
的用户id使用自联接进行计数:输出:
对于重复数据,让我们尝试:
输出:
这里是另一种方法,使用numpy广播创建一个矩阵,该矩阵是通过将{}中的每个值与每个其他值进行比较获得的,然后从该矩阵创建一个新的数据帧,其中{}和{}设置为{},并沿着{}和{}对{}进行计数段塞的横截面:
相关问题 更多 >
编程相关推荐