我有两个基于位置的熊猫DataFrame。
df1:包含由完整地址组成的列,例如“英国伦敦伊灵埃文路”。地址格式不同。
df1.address[0] --> "Avon Road, Ealing, London, UK"
df2:仅包含英国城市,例如“伦敦”。
df2.city[5] --> "London"
给定完整地址,我想找到第一个数据框的城市。这样,这将在我的第一个数据帧上进行。
df1.city[0] --> "London"
方法1:对于df2中的每个城市,检查df1是否具有这些城市,并将df1和df2的索引存储在列表中。
我不确定如何执行此操作,但是我假设我将使用此代码来找出是否存在部分字符串匹配并找到索引的位置:
df1['address'].str.contains("London",na=False).index.values
方法2:对于每个df1地址,检查是否有任何单词与df2中的城市匹配并将df2的值存储在列表中。
我认为这种方法更直观,但是计算上会更昂贵吗?假设df1具有数百万个地址。
抱歉,这是一个愚蠢或简单的问题!指向最有效代码的任何方向都将有所帮助:)
方法2确实是一个好的开始。但是,使用Python字典而不是列表应该更快。这是示例代码:
cityIndex = set(df2.city)
addressLocations = []
for address in df1.address:
location = None
# Warning: ignore characters like '-' in the cities
for word in re.findall(r'[a-zA-Z0-9]+', address):
if word in cityIndex:
location = word
break
addressLocations.append(location)
df1['city'] = addressLocations
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句