如何在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
相关产品推荐
相关产品推荐

