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

