python - 创建一个 Pandas 数据透视表来计算项目一起出现在列表中的次数

标签 python pandas numpy pivot-table

我正在尝试计算用户在同一 session 中查看页面的次数。
我从一个列出 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
我想要得到的是一个数据透视表,它计算 slug 横截面的 user_ids


.
弹头1
弹头2
弹头3
弹头4
弹头5


弹头1
2
2
2
1
1

弹头2
2
2
2
1
1

弹头3
2
2
2
1
1

弹头4
1
1
1
1
0

弹头5
1
1
1
0
1


我意识到这将是我们看到 slug1 和 slug2 与 slug2 和 slug1 时反射(reflect)的相同数据,但我想不出更好的方法。
到目前为止我已经做了一个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]
但是我正在努力考虑循环来计算项目何时一起出现在列表中(尽管有顺序)以及如何存储它。然后我也不知道如何以可旋转的格式获得它。

最佳答案

这是使用 numpy 广播创建矩阵的另一种方法,该矩阵是通过比较 user_id 中的每个值而获得的。使用其他所有值,然后使用 index 从该矩阵创建一个新数据框和 columns设置为 page_view_page_slug并取 sumlevel=0沿axis=0axis=1来数 user_ids段塞的横截面:

a = df['user_id'].values
i = list(df['page_view_page_slug'])

pd.DataFrame(a[:, None] == a, index=i, columns=i)\
   .sum(level=0).sum(level=0, axis=1).astype(int)
       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

关于python - 创建一个 Pandas 数据透视表来计算项目一起出现在列表中的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66036510/

相关文章:

python - 在Python中合并时间序列数据帧

python - 使用 python/pandas 数据帧对 csv 文件进行反规范化

python - Pypy vs Python 中的计数算法性能优化(Numpy vs List)

python - C API 中 Numpy datetime64 的转换

python - 在 Python Matplotlib 中将图形保存为 eps 时出错

python - Nginx 或 Django 正在删除上传文件的权限

python - 无法运行 python 脚本 - ImportError : No module named '_chipset'

python - 是否有任何 sqlalchemy 列表插值语法适用于 sqlite (用于测试)和 mysql (用于生产)?

python - 使用 describe 和 dtypes 创建自定义函数时出错

numpy - undefined symbol : clapack_sgesv