使用违反一对一映射的列查找Pandas DataFrame中的行

Rog*_*ger 6 python pandas

我有一个像这样的DataFrame:

| index | col_1 | col_2 |
| 0     | A     | 11    |
| 1     | B     | 12    |
| 2     | B     | 12    |
| 3     | C     | 13    |
| 4     | C     | 13    |
| 5     | C     | 14    |
Run Code Online (Sandbox Code Playgroud)

由于数据损坏,在哪里col_1,col_2可能不总是一对一.

如何使用Pandas来确定哪些行col_1col_2违反这种一对一关系的条目?

在这种情况下,它将是最后三行,因为C可以映射到13或14.

Aar*_*all 0

我会使用 a collections.Counter,因为列中每个项目的多个实例违反了一对一映射:

>>> import pandas
>>> import numpy
>>> import collections
>>> df = pandas.DataFrame(numpy.array([['a', 1],['b', 2], ['b', 3], ['c', 3]]))
>>> df
   0  1
0  a  1
1  b  2
2  b  3
3  c  3
>>> collections.Counter(df[0])
Counter({'b': 2, 'a': 1, 'c': 1})
>>> violations1 = [k for k, v in collections.Counter(df[0]).items() if v > 1]
>>> violations2 = [k for k, v in collections.Counter(df[1]).items() if v > 1]
>>> violations1
['b']
>>> violations2
['3']
Run Code Online (Sandbox Code Playgroud)