首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在excel工作表中搜索一列的元素,在另一工作表中搜索另一列的元素

在excel工作表中搜索一列的元素,在另一工作表中搜索另一列的元素
EN

Stack Overflow用户
提问于 2019-05-22 00:41:07
回答 1查看 0关注 0票数 0

我在一个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

代码语言:javascript
复制
Column-Places1         

moscow
riga
london(pg)
kiev
addisababa

现在让我们考虑master.xls

代码语言:javascript
复制
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

代码语言:javascript
复制
      moscow         jr897
      riga           missing
      london(pg)     jr2124
      kiev           missing 
      addis-ababa    uy7865
EN

回答 1

Stack Overflow用户

发布于 2019-05-22 10:13:08

这是我想出的:

代码语言:javascript
复制
pat= r'({})'.format('|'.join(master['Places'].str.replace(' ','')))
#which looks like :-> '(chicago|newyork|london|moscow|addisababa)'

然后我们借助series.str.extract()提取匹配元素(我在此之前替换空格),最后series.map()使用主文件字典。

代码语言:javascript
复制
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)
代码语言:javascript
复制
      Places1 Geo-Details1
0      moscow        jr897
1        riga      missing
2  london(pg)       jr2124
3        kiev      missing
4  addisababa       uy7865
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档