我需要结果具有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]


或者,使用groupbynuniquemap

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

  COL1  COL2
1    B     2
2    B     2
3    B     3




如果要将COL1值映射到COL2值,则可以使用其他groupbyapply

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/

10-16 03:45