我有一个像这样的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_1和col_2违反这种一对一关系的条目?
在这种情况下,它将是最后三行,因为C可以映射到13或14.
我会使用 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)