在df列/列表中搜索字符串的最快方法



我有两个dfs:df_1:100K行。每一行表示一个字符串的信息(唯一(。第一列就是那个字符串。其余的列是关于它的属性

df_2:10M行。每一行表示一个字符串的信息(唯一(。第一列就是那个字符串。其余的列是关于它的属性

我想检查df_1中的字符串是否存在于df_2中。(对df_1中的所有字符串执行此操作(。但是,我想尽量减少运行时间。有没有优化我写的代码的方法:

def check_exists(keyword):
keyword = keyword[0]
print('check if keyword exists: ' + keyword)

if (keyword in list_10m_keywords):
df_1.loc[df_1['keyword'] == keyword, 'exists'] = 'TRUE'
print('exists')
else:
print('not exists')

# Load df_1
# Save as global be used in other scopes
global df_1 
df_1 = pd.read_pickle('keywords_data_100k.pkl')

# Load and convert df_2 column to list
# Save as global be used in other scopes
global list_10m_keywords
df_2 = pd.read_pickle('keywords_data_10m.pkl')
list_10m_keywords = df_2 ['keyword'].tolist()
# Set not exists for all keywords up front
df['exists'] = 'FALSE'
# Iterate all rows in df_1, check if exists in df_2
[check_exists(keyword) for keyword in zip(df_1['keyword'])]

这里的部分问题是您要搜索df_1两次,第一次是检查是否存在,然后再次匹配字符串值。你可以将这两个步骤结合起来做这样的事情:

df_2['exists'] = [True if x in df_1['keyword'] else False for x in df_2['keyword']]

您可能可以用这一行替换check_keywords()函数,并且它的处理速度应该更快。

最新更新