我需要结果具有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中具有多个匹配项(即,在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
和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
关于python - 查找与另一列中多个匹配的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54273942/