You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中对两个不同长度的DataFrame列进行部分匹配?

实现DataFrame部分匹配并新增列

数据定义

先把两个DataFrame用代码定义出来:

import pandas as pd
import numpy as np

# DF1
df1 = pd.DataFrame({
    'filename': ['b~cute', 'b~cute2', np.nan, 'b~cat', 'b~dog', np.nan]
})

# DF2
df2 = pd.DataFrame({
    'filename': [
        'sgjsg~12345~b~cute~v4.jpeg',
        'jgsgj~1233~b~dog~v4.jpeg',
        'jhdjd~1252~b~cat~v4.jpeg',
        'sggsn~1252~b~cute2~v4.jpeg'
    ]
})

解决方案

方法1:遍历匹配(灵活通用)

通过apply遍历DF1的每个文件名,在DF2中找到包含该字符串的路径:

def get_filepath(name):
    if pd.isna(name):
        return np.nan
    # 筛选DF2中包含当前文件名的记录
    match_row = df2[df2['filename'].str.contains(name, na=False)]
    return match_row['filename'].iloc[0] if not match_row.empty else np.nan

df1['filepath'] = df1['filename'].apply(get_filepath)

方法2:构建映射字典(效率更高)

先从DF2中提取匹配关键词,构建关键词到路径的字典,再直接映射到DF1:

# 构建关键词-路径映射字典
match_map = {}
for path in df2['filename']:
    # 拆分路径字符串,提取b~开头的关键词
    for segment in path.split('~'):
        if segment.startswith('b~'):
            match_map[segment] = path
            break

# 映射到DF1
df1['filepath'] = df1['filename'].map(match_map)

最终结果

执行任意一种方法后,DF1会得到如下结果:

filenamefilepath
b~cutesgjsg12345bcutev4.jpeg
b~cute2sggsn1252bcute2v4.jpeg
nannan
b~catjhdjd1252bcatv4.jpeg
b~dogjgsgj1233bdogv4.jpeg
nannan

内容的提问来源于stack exchange,提问作者HiAlllllll

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 11:47:14