首页 > 解决方案 > 带前缀的熊猫 loc

问题描述

我有两个数据帧,我希望一个数据帧中的每一行通过某个列(包含一些 id)定位另一个数据帧中的匹配行。我想检查 df1 中的行并使用 loc 函数在 df2 中找到匹配的行。

问题是 df2 中的一些 id 有一些额外的信息,除了 id 本身。

例如:df1 的 id:1234,df2 的 id:1234-KF

例如,如何使用 loc 找到此 id?loc 可以以某种方式仅通过前缀匹配吗?

标签: pythonpandasdataframepandas-loc

解决方案


可以使用例如正则表达式(或子字符串)删除额外信息:

import pandas as pd
import re

df1 = pd.DataFrame({
    'id': ['123', '124', '125'],
    'data': ['A', 'B', 'C']
})

df2 = pd.DataFrame({
    'id': ['123-AA', '124-AA', '125-AA'],
    'data': ['1', '2', '3']
})

df2.loc[df2.id.apply(lambda s : re.sub("[^0-9]", "", s)) == df1.id]

推荐阅读