我在一个excel表(比如search.xls)中有一个“Places1”列,并且有一个单独的汇集excel表,其中包含“Places”和“Geo-Details”列(比如master.xls)。我想搜索search.xls中“Places1”列中的项目是否存在于master.xls的“Places”列中,如果满足该条件,则复制该元素的“Geo-Details”列的相应内容匹配是在search.xls中的'Places1'中添加一个'Geo-Details1'列,否则在该单元格中写'missing'。
我正在使用嵌套循环并使用pandas处理我创建的数据帧,但这个过程需要很长时间。'Places1'中的元素数量为11500,而'Place'中的元素数量大约为8000.此外,'Places1'中的字符串可能与'Places'的字符串不完全匹配,因为存在某些后缀,如(pg),&12, ()等。你能帮助优化搜索算法和模糊匹配。
例子
让我们考虑一下search.xls
Column-Places1
moscow
riga
london(pg)
kiev
addisababa
现在让我们考虑master.xls
Places Geo-Details
chicago aw1232
new york aw1295
london jr2124
moscow jr897
addis ababa uy7865
python code
import os
import pandas as pd
import numpy as np
df_search = pd.read_excel(r'path')
df_master = pd.read_excel(r'path')
for i in range(len(df_search['Places1'])):
for j in range(len(df_master['Place'])):
if df_search['Places1'][i] == df_master['Place'][j]:
df_search.loc[i, 'Geo-Details1'] = df_master.loc[j,'GeoDetails']
else:
df_search.loc[i, 'Geo-Details1'] = 'missing'
df_search.to_excel(r'output path')
search.xls表中的预期输出
列 - Places1 Geo-Details1
moscow jr897
riga missing
london(pg) jr2124
kiev missing
addis-ababa uy7865
发布于 2019-05-22 10:13:08
这是我想出的:
pat= r'({})'.format('|'.join(master['Places'].str.replace(' ','')))
#which looks like :-> '(chicago|newyork|london|moscow|addisababa)'
然后我们借助series.str.extract()
提取匹配元素(我在此之前替换空格),最后series.map()
使用主文件字典。
d=master.set_index(master['Places'].str.replace(' ',''))['Geo-Details']
search['Geo-Details1']=(search.Places1.str.extract(pat,expand=False)
.map(d).fillna('missing'))
print(search)
Places1 Geo-Details1
0 moscow jr897
1 riga missing
2 london(pg) jr2124
3 kiev missing
4 addisababa uy7865
https://stackoverflow.com/questions/-100006776
复制相似问题