在两个数组中查找重复值,Python

4
我有两个数组(A和B),每个数组中大约有50,000个值。每个值代表一个ID。我想创建一个带有三列的pandas数据框,col1:来自数组A的值,col2:来自数组B的值,col3:一个字符串,标签为“unique”或“duplicate”。在每个数组中,ID是唯一的。
这两个数组的长度不同。因此,我无法像下面这样开始:
a = np.array([1, 2, 3, 4, 5])
a = np.array([5, 6, 7, 8, 9, 10])
pd.DataFrame({'a':a, 'a':b})

我当时打算创建一个不同的pandas数据框,也有三列。一列是ID,另一列是ID来自哪个数组(a或b)。然后按ID分组并计算出现次数。如果>=2,则表明有重复。
但我无法弄清楚如何在同一列中将numpy数组连接在一起(类似于R中的rbind),并同时创建基于值来自哪个数组的其他列。
很可能有比我上面提出的更好的解决方案。有什么想法吗?

请发布您期望的输出。 - Mayank Porwal
3个回答

5

要在两个数组中查找重复元素,请使用 numpy.intersect1d

In [458]: a = np.array([1, 2, 3, 4, 5])

In [459]: b = np.array([5, 6, 7, 8, 9, 10])

In [462]: np.intersect1d(a,b)
Out[462]: array([5])

2
将数组转换为序列,然后连接它们以创建数据帧。
a = np.array([1, 2, 3, 4, 5,])
b = np.array([5, 6, 7, 8, 9, 10])

s1 = pd.Series(a, name = 'a')
s2 = pd.Series(b, name = 'b')
pd.concat([s1, s2], axis = 1)

     a  b
0   1.0 5
1   2.0 6
2   3.0 7
3   4.0 8
4   5.0 9
5   NaN 10

1
尝试使用合并 + 指示器。
out = pd.DataFrame({'a':a}).merge(pd.DataFrame({'b':b}), left_on='a',right_on='b',indicator=True,how='outer')
Out[210]: 
     a     b      _merge
0  1.0   NaN   left_only
1  2.0   NaN   left_only
2  3.0   NaN   left_only
3  4.0   NaN   left_only
4  5.0   5.0        both
5  NaN   6.0  right_only
6  NaN   7.0  right_only
7  NaN   8.0  right_only
8  NaN   9.0  right_only
9  NaN  10.0  right_only

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接