Python 测试数据帧的多列中是否有共享值
如何测试数据帧的多列中是否有共享的值?例如,这是确定的:Python 测试数据帧的多列中是否有共享值,python,pandas,Python,Pandas,如何测试数据帧的多列中是否有共享的值?例如,这是确定的: A B C 0 aaa fff lll 1 bbb ggg mmm 2 ccc hhh nnn 3 ddd iii ooo 4 eee jjj ppp 但事实并非如此 A B C 0 aaa fff lll 1 bbb ggg mmm 2 ccc hhh nnn 3 ddd iii bbb 4 eee jjj
A B C
0 aaa fff lll
1 bbb ggg mmm
2 ccc hhh nnn
3 ddd iii ooo
4 eee jjj ppp
但事实并非如此
A B C
0 aaa fff lll
1 bbb ggg mmm
2 ccc hhh nnn
3 ddd iii bbb
4 eee jjj ppp
因为bbb存在于多个列A和C中。首先获取所有列组合之间的交集,转换为numpy数组,然后转换为布尔值,并至少测试一个True: 对于第一个df:
print (a)
[set(), set(), set()]
print (b)
False
对于第二个df:
print (a)
[set(), {'bbb'}, set()]
print (b)
True
有关更多信息,请使用未经测试的:
d = {i:set(df[i[0]]) & set(df[i[1]]) for i in combinations(df.columns,2)}
s = pd.Series(d)
s = s[s.astype(bool)]
您的所有列是否都属于同一obj数据类型?您是否期望类似于布尔数组的东西,它对应于每个具有某种真/假的唯一值。该值以2+列表示?是的,一致的数据类型整数。只是在这里使用了字符串,以便于查看。我不需要一个有问题的单元格的奇特的布尔映射,但我想知道哪些值是违规的,它们存在于哪些列中。
d = {i:set(df[i[0]]) & set(df[i[1]]) for i in combinations(df.columns,2)}
s = pd.Series(d)
s = s[s.astype(bool)]