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

如何基于部分匹配文本合并两个Pandas DataFrame?

Pandas基于部分文本匹配合并DataFrame的解决方案

你需要基于df2['Site']与df1['Hostname']中的部分文本匹配来合并两个DataFrame,原代码的核心问题是没有找到正确的关联列,且reduce和merge的用法存在错误。以下是具体实现步骤:

1. 构造示例数据(可替换为你的真实数据)

import pandas as pd

df1 = pd.DataFrame({
    'Hostname': ['ServerABC101', 'ServerABC102', 'ServerDDC103', 'ServerDDC609', 'ServerDDC103', 'ServerDDC609'],
    'Region': ['US', 'US', 'PAC', 'Emea', 'PAC', 'Emea'],
    'Model': ['Cisco', 'Cisco', 'Intel', 'Intel', 'Intel', 'Intel']
})

df2 = pd.DataFrame({
    'Site': ['ABC', 'DDC'],
    'City': ['NYC', 'DAL'],
    'State': ['NY', 'TX']
})

2. 从df1的Hostname中提取Site匹配部分

根据你的数据格式(Server+Site+数字),用正则表达式提取Hostname中的Site字段:

# 匹配"Server"后、数字前的字母部分,生成新的Site列
df1['Site'] = df1['Hostname'].str.extract(r'Server(\w+)\d+')

如果Hostname的格式不固定(Site位置不确定),可以用遍历匹配的方法(适合小型数据集,大型数据集优先用正则):

def match_site(hostname):
    for site in df2['Site']:
        if site in hostname:
            return site
    return None

df1['Site'] = df1['Hostname'].apply(match_site)

3. 基于Site列合并两个DataFrame

用pd.merge合并,选择how='left'保留df1的所有行:

final_df = pd.merge(df1, df2, on='Site', how='left')

合并结果示例

Hostname Region  Model Site City State
0  ServerABC101     US  Cisco  ABC  NYC    NY
1  ServerABC102     US  Cisco  ABC  NYC    NY
2  ServerDDC103    PAC  Intel  DDC  DAL    TX
3  ServerDDC609    Emea  Intel  DDC  DAL    TX
4  ServerDDC103    PAC  Intel  DDC  DAL    TX
5  ServerDDC609    Emea  Intel  DDC  DAL    TX

原代码错误说明

  • reduce的参数逻辑错误:lambda变量与内部引用的变量不匹配,且merge的how参数未加引号,括号闭合错误;
  • 核心逻辑错误:两个DataFrame没有共同的Hostname列,无法直接以此作为关联键,必须先提取出匹配的Site字段再合并。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:10:17