python - 计算给定列的排列出现次数
问题描述
在 Pyhon 中,我试图编写一些代码来计算数据集中给定排列的实例。让我更清楚。给定以下数据框
WEB_ID Category
12332405 a
3763583 b
7930245 c
7930245 a
我想要一个看起来像这样的数据框。
s t q
a b 0
a c 1
b a 0
b c 0
c a 1
c b 0
这是读取的,有 0 个 id 具有类别 a 和 b,1 具有 a 和 c,0 具有 b 和 a... 等等。
我正在使用 Itertools 模块创建所有类别的排列。我有一些想法,但看起来都很丑陋而且没有表现。
感谢您的帮助,如果不清楚,请告诉我,我会添加详细信息。
谢谢社区!
解决方案
有关于如何使笛卡尔积更高效的帖子,但基本思想是:
merge
on'WEB_ID'
以获取'Category'
. (这本质上给出了您想要获得的 AB-BA 匹配的互惠性)groupby
+size
计算出现次数。.reindex
得到零。- 删除与自己合并的东西。
代码:
import pandas as pd
res = (df.merge(df, on='WEB_ID')
.groupby(['Category_x', 'Category_y']).size()
.reindex(pd.MultiIndex.from_product([df.Category.unique()]*2,
names=['s', 't']))).fillna(0)
res = res[res.index.get_level_values(0) != res.index.get_level_values(1)]
res = res.to_frame('q')
输出:res
q
s t
a b 0.0
c 1.0
b a 0.0
c 0.0
c a 1.0
b 0.0
推荐阅读
- postgresql - 由于错误引发的 SQL 异常(sql 代码)(sqlState 42883):操作符不存在:字符变化 + 未知
- python - 无法分配“OrderedDict()...:“...”必须是“...”实例
- android - 如何在 onBindViewHolder 中获取 RecyclerView 单元格的高度/宽度?
- java - 从线程池线程调用api时如何测量api的响应时间。(java spring boot)
- angular - 无法从 Mac 卸载 CLI
- javascript - 如何在 JavaScript 中创建 RTMP 视频编码器
- python - 通过将 Channels 添加到 settings.py INSTALLED_APPS 导致 Django 错误
- excel - 输出填充在下一行中,并且不会覆盖 VBA 循环过程中的现有行
- python - Python客户端套接字不会从另一台机器连接到服务器?
- javascript - 当在频道中发送消息时,Discord 机器人会给人一个角色