python - 查找两个 pandas 数据帧之间部分字符串匹配的最快方法

标签 python pandas performance

我有两个基于位置的 pandas DataFrame。

df1:其中有一列包含完整地址,例如“Avon Road, Ealing, London, UK”。地址的格式各不相同。

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

关于python - 查找两个 pandas 数据帧之间部分字符串匹配的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62503672/

相关文章:

python - Python 中的 "from A import B.C"?

python - 从第一个数据帧的两列中查找到第二个数据帧中的一列

c++ - std::vector 比普通数组快吗?

javascript - 从 Javascript 中删除空行会提高性能吗?

performance - 停止应用程序的所有内存访问

python - 我在哪里可以获得有关 Django 内部如何工作的技术信息?

python - 将 Django channel 与现有 Django 3.1 wsgi 代码集成时出错

python - 分层KFold输出处理

python - 如何重新抽样 6 个月

python - Pandas MultiIndex 中的重采样