【发布时间】:2021-02-03 22:14:15
【问题描述】:
我正在尝试计算用户在同一会话中查看页面的次数。
我从一个列出 user_ids 和他们访问过的页面 slug 的数据框开始:
user_id page_view_page_slug
1 slug1
1 slug2
1 slug3
1 slug4
2 slug5
2 slug3
2 slug2
2 slug1
我希望得到的是一个数据透视表,计算 slugs 横截面的 user_ids
| . | slug1 | slug2 | slug3 | slug4 | slug5 |
|---|---|---|---|---|---|
| slug1 | 2 | 2 | 2 | 1 | 1 |
| slug2 | 2 | 2 | 2 | 1 | 1 |
| slug3 | 2 | 2 | 2 | 1 | 1 |
| slug4 | 1 | 1 | 1 | 1 | 0 |
| slug5 | 1 | 1 | 1 | 0 | 1 |
我意识到当我们看到 slug1 和 slug2 与 slug2 和 slug1 时,这将是相同的数据,但我想不出更好的方法。 到目前为止我已经做了一个listagg
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]
但是我很难想到当项目一起出现在列表中时(尽管有顺序)以及如何存储它来计算循环。然后我也不知道如何以可旋转的格式获得它。
【问题讨论】:
-
你试过
df.pivot吗? -
数据是否有重复的可能?例如,如果
(user_id 1, slug1)重复,那么结果应该是什么?对于当前的两个答案,它要么为slug1(重复)创建额外的行和列,要么添加两次,第一行和第一列变为[5, 3, 3, 2, 1],我认为这更准确。
标签: python pandas numpy pivot-table