python - 查找列与另一列中多个匹配的位置
问题描述
我需要结果具有 1:1 基数,所以我需要测试 COL1 中的值是否在 COL2 中多次存在
COL1 COL2
A 1
B 2
B 2
B 3
C 4
D 5
E 5
E 5
使用 Python(最好是 Pandas,除非存在更好的方法),我想查看 COL1 中的值在 COL2 中有多个匹配项的所有行?在上面的示例中,我想知道 COL1=B 何时在 COL2 中有超过 1 个匹配项(即 COL1 = B 中的基数与 COL2 = 2 和 3 匹配/连接?
解决方案
如果您只想要违反此条件的行,请使用groupby
并检查nunique
:
df[df.groupby('COL1').COL2.transform('nunique') > 1]
或者,使用groupby
、nunique
和map
:
df[df.COL1.map(df.groupby('COL1').COL2.nunique()) > 1]
COL1 COL2
1 B 2
2 B 2
3 B 3
如果您想要 COL1 值到 COL2 值的映射,可以使用附加的groupby
and apply
:
df[df.groupby('COL1').COL2.transform('nunique') > 1].groupby('COL1').COL2.apply(set)
COL1
B {2, 3}
Name: COL2, dtype: object
最后,如果您想要的只是 > 1 COL1 值的“基数”,请使用
df.groupby('COL1').COL2.nunique().to_frame().query('COL2 > 1')
COL2
COL1
B 2
推荐阅读
- javascript - 编号我从 txt 文件加载的行
- javascript - 我无法调用分配给 React 中元素的函数
- c++ - 如何抑制从 CommCtrl.h 中提取的 C26454 代码分析?
- azure - 如何配置 Azure 应用程序网关以允许连接到容器实例
- c# - 部署后未出现静态 .gif
- php - 如何在优惠券规则 Magneto 2 上添加自定义选项值
- gitpod - 是否可以在 Gitpod 中取消删除文件?
- python - 如何对fasta文件的标题进行分组
- javascript - 如何使用 PHP 和 cURL 将 e.parameter 发送到 Google Apps 脚本
- amazon-web-services - AWS IAM - 如何拒绝对具有特定标签的资源的任何操作?