Python 在熊猫数据框架上对1000万个模式执行str.contains并获得每个模式的匹配的有效方法

Python 在熊猫数据框架上对1000万个模式执行str.contains并获得每个模式的匹配的有效方法,python,pandas,Python,Pandas,我有一个名为“subset”的pandas数据框,我想计算列“sequence”包含名为motif的集合中每个模式的行数。我使用for循环完成了这项工作,遍历了一组主题,并确定了每个主题的匹配项。然而,这一套是巨大的,我有1000万个图案,它需要很长的时间来完成这一步。对于1000万个模式,有没有更有效的方法执行str.contains 这是我的密码: motif_background = {} for motif in motifs: ### loop through set of 12,00

我有一个名为“subset”的pandas数据框,我想计算列“sequence”包含名为motif的集合中每个模式的行数。我使用for循环完成了这项工作,遍历了一组主题,并确定了每个主题的匹配项。然而,这一套是巨大的,我有1000万个图案,它需要很长的时间来完成这一步。对于1000万个模式,有没有更有效的方法执行str.contains

这是我的密码:

motif_background = {}
for motif in motifs: ### loop through set of 12,000,000 motifs
 match = subset['sequence'].str.contains(motif).sum() ### get the number of rows whose 'sequence' column contains  the motif 
 motif_background[motif].append(match)

对于像您这样的大型数据集,您可以使用多处理在多个核上更快、并行地计算结果

以下是工作代码:

from multiprocessing import Pool
import os
import numpy as np

pool = Pool(os.cpu_count())
split_df_results = pool.map(fn_to_execute, np.array_split(df, num_cores))
df = pd.concat(split_df_results)
pool.close()
pool.join()

对于像您这样的大型数据集,您可以使用多处理在多个核上更快、并行地计算结果

以下是工作代码:

from multiprocessing import Pool
import os
import numpy as np

pool = Pool(os.cpu_count())
split_df_results = pool.map(fn_to_execute, np.array_split(df, num_cores))
df = pd.concat(split_df_results)
pool.close()
pool.join()