测试DataFram的多列中是否有共享的值

2024-06-12 08:47:05 发布

您现在位置:Python中文网/ 问答频道 /正文

如何测试数据帧的多列中是否有共享的值?例如,这是可以的:

      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)中。你知道吗


Tags: fffiiipppbbbccc测试数据mmmddd
1条回答
网友
1楼 · 发布于 2024-06-12 08:47:05

首先获取所有列组合之间的交集,转换为numpy array,然后转换为boolean,并测试至少一个True

from itertools import combinations
a = [set(df[i[0]]) & set(df[i[1]]) for i in combinations(df.columns,2)]
b = np.array(a).astype(bool).any()

对于第一个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)]

相关问题 更多 >