首页 > 解决方案 > 查找列与另一列中多个匹配的位置

问题描述

我需要结果具有 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 匹配/连接?

标签: pythonpandasdataframe

解决方案


如果您只想要违反此条件的行,请使用groupby并检查nunique

df[df.groupby('COL1').COL2.transform('nunique') > 1]

或者,使用groupbynuniquemap

df[df.COL1.map(df.groupby('COL1').COL2.nunique()) > 1]

  COL1  COL2
1    B     2
2    B     2
3    B     3

如果您想要 COL1 值到 COL2 值的映射,可以使用附加的groupbyand 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

推荐阅读