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

如何使用pandasql带条件连接两个DataFrame并生成匹配标识

解决方案

方法一:使用pandasql的CASE语句实现

你需要修改SQL查询语句,通过CASE WHEN判断左连接后是否匹配到dfLookup中的ID,从而生成Found列的结果:

import pandas as pd
import sqldf

# 初始化DataFrame
listCode= ['A1','A2','A3','A4','A5','A6']
dfLookup = pd.DataFrame({'ID':listCode})

data = [['Chicago', 'B1'], ['Madsion', 'A1'], ['NY', 'A4']]
dftest = pd.DataFrame(data, columns=['City', 'Code'])

# 修改后的SQL查询
sQuery = """
SELECT 
    dftest.City, 
    dftest.Code,
    CASE WHEN dfLookup.ID IS NOT NULL THEN 1 ELSE 0 END AS Found
FROM dftest 
LEFT JOIN dfLookup 
ON dftest.Code = dfLookup.ID
"""
sqlResult = sqldf.run(sQuery )
print(sqlResult)

执行后输出结果:

City Code  Found
0  Chicago   B1      0
1  Madsion   A1      1
2       NY   A4      1

方法二:纯Pandas方法(更简洁高效)

无需借助SQL,直接用Pandas内置的isin方法就能快速实现需求,代码更简洁:

import pandas as pd

listCode= ['A1','A2','A3','A4','A5','A6']
dfLookup = pd.DataFrame({'ID':listCode})

data = [['Chicago', 'B1'], ['Madsion', 'A1'], ['NY', 'A4']]
dftest = pd.DataFrame(data, columns=['City', 'Code'])

# 判断Code是否在dfLookup的ID列表中,转换为整数类型
dftest['Found'] = dftest['Code'].isin(dfLookup['ID']).astype(int)
print(dftest)

运行后同样会得到你期望的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 19:27:59