Python 如何快速搜索熊猫的重复值?

Python 如何快速搜索熊猫的重复值?,python,string,pandas,Python,String,Pandas,我有一个数据框中的列:900k行。熊猫系列的结构: base['SampleID']= 231233 124123 213h213 jkiu12341 213i12i24u 我还有一个名称列表包含84k个字符串 例如,listOFNames=[jkiu12341,DAS2123233213321332N3JU213] 我需要做什么? 我需要将列表中的每个值与数据系列(base['SampleID]')行进行比较,并检查它是否包含重复 如果脚本在序列中发现相同的值,则应将其保存(追加)到另一个数

我有一个数据框中的列:900k行。熊猫系列的结构:

base['SampleID']
=

231233
124123
213h213
jkiu12341
213i12i24u
我还有一个
名称列表
包含84k个字符串 例如,
listOFNames=[jkiu12341,DAS2123233213321332N3JU213]

我需要做什么?

我需要将列表中的每个值与数据系列(
base['SampleID]'
)行进行比较,并检查它是否包含重复

如果脚本在序列中发现相同的值,则应将其保存(追加)到另一个数据帧,否则应传递

问题:

我需要使用正则表达式,因为有时在列表中我会使用正则表达式,例如,
ff5434
在系列中:“00ff5434”-它应该被理解为重复

我用python编写了一个函数,但速度非常慢。比较900k行需要35-40分钟

我的代码:

found = 0
notfound = 0

for i in range(len(listOfNames)):
    if len(base[base['SampleId'].str.contains(listOfNames[i], regex=False)]) > 0 :
        found += 1
    else:
        notfound+= 1
因此,对循环扫描整个系列非常简单。它还没有将创建的行附加到数据帧,只是计算我有多少重复的行

预期结果:

重复的数据帧。在上面的示例中,它将是:仅数据帧或列表包含
jkiu12341


也许有人知道本机pandas函数,或者任何其他库可以帮助更快地完成它并替换my for函数?

pandas
在哪里
如何?信息。或者,也可以从
numpy
中选择
?信息

如果没有@anky_91指出的最小、完整和可验证的示例(),就很难做更多的事情。

您可以使用它在列表中查找值,您可以执行以下代码:

df = pd.DataFrame({ 'base': ['231233', '124123', '213h213', 'jkiu12341', 
                             '213i12i24u'],})
listOFNames =['jkiu12341','das2123','233213','321n3ju213']
# Result as a list
output=list(df.base[df['base'].isin(listOFNames)])
print(output)
# Result as a DataFrame
df_result=pd.DataFrame(output,columns=['output'])
print(df_result)
输出:

['jkiu12341']

      output
0  jkiu12341
执行搜索操作所需的时间:

%timeit output=list(df.base[df['base'].isin(listOFNames)])

585 µs ± 46.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

请创建一个简短的例子来重复你的问题。这样你会发现误报。唯一的区别是0吗?和regex=False表示您不使用regex?在清理/规范化前导或尾随0的数据(以及数据中是否存在其他类似模式)后,您可以使用set intersection来确定公共值。非常感谢您对我的帮助,我学到了一些新东西:)