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

如何在Python Pandas中匹配两DataFrame列值并筛选目标结果行

在Pandas中实现包含匹配并关联对应值的方法

下面提供几种实用的实现方式,满足你筛选df2.col_x包含df1.col1值并关联对应字段的需求:

方法一:交叉连接+逐行判断

先生成两个DataFrame的笛卡尔积,再筛选符合包含条件的行,适合数据量不大的场景:

import pandas as pd

df1 = pd.DataFrame({"col1":["APPLE", "BANANA", "ORANGE"]})
df2 = pd.DataFrame({"col_x":["APPLEXX", "BANANA", "CARROT"]})

# 生成交叉连接(笛卡尔积)
cross_df = df1.assign(key=1).merge(df2.assign(key=1), on='key').drop('key', axis=1)
# 筛选col_x包含col1的行
result = cross_df[cross_df.apply(lambda row: row['col1'] in row['col_x'], axis=1)]
# 重置索引(可选)
result = result.reset_index(drop=True)

print(result)

输出结果:

col1    col_x
0   APPLE  APPLEXX
1  BANANA   BANANA

方法二:遍历收集匹配对

直接遍历两个字段的所有值,收集符合条件的组合,逻辑直观易懂:

import pandas as pd

df1 = pd.DataFrame({"col1":["APPLE", "BANANA", "ORANGE"]})
df2 = pd.DataFrame({"col_x":["APPLEXX", "BANANA", "CARROT"]})

matches = []
for val1 in df1['col1']:
    for val2 in df2['col_x']:
        if val1 in val2:
            matches.append({'col1': val1, 'col_x': val2})

result = pd.DataFrame(matches)
print(result)

输出与方法一完全一致。

方法三:正则匹配缩小范围后关联

先通过正则表达式筛选df2中符合条件的行,再关联df1,数据量大时效率更高:

import pandas as pd

df1 = pd.DataFrame({"col1":["APPLE", "BANANA", "ORANGE"]})
df2 = pd.DataFrame({"col_x":["APPLEXX", "BANANA", "CARROT"]})

# 生成正则匹配模式,把col1的所有值作为备选
pattern = '|'.join(df1['col1'])
# 先筛选df2中包含任意col1值的行
filtered_df2 = df2[df2['col_x'].str.contains(pattern)]
# 交叉连接后再次精准匹配,避免误判(比如若有值同时包含多个col1内容)
result = filtered_df2.assign(key=1).merge(df1.assign(key=1), on='key').drop('key', axis=1)
result = result[result.apply(lambda row: row['col1'] in row['col_x'], axis=1)].reset_index(drop=True)

print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:45:25