如何匹配两个DataFrame并生成ID与Item组合的新列
解决方案
你这个场景直接用pandas的merge做跨表关联匹配是最高效的方案,pandas底层针对关联操作做了性能优化,远快于手动用np.select遍历匹配,也不会出现标签对齐相关的报错。
具体实现代码如下:
# 按ID字段关联两个表,inner join仅保留DF2中存在的ID result = DF2.merge(DF1, on="ID", how="inner") # 拼接ID和Item生成目标列,注意先把数值型ID转成字符串类型 result["Item / ID"] = result["ID"].astype(str) + " - " + result["Item"] # 筛选保留需要的字段即可得到最终结果 result = result[["ID", "Item / ID"]]
如果存在DF2的ID在DF1中匹配不到的场景,可以把关联方式改为左连接,自定义缺省值:
# 左连接保留DF2所有ID result = DF2.merge(DF1, on="ID", how="left") # 匹配不到的Item填充自定义缺省值 result["Item"] = result["Item"].fillna("N/A") result["Item / ID"] = result["ID"].astype(str) + " - " + result["Item"] result = result[["ID", "Item / ID"]]
之前使用np.select报错的原因是该函数要求参与对比的序列长度、索引标签完全一致,两个表行数、索引不一致时自然会触发报错,merge基于字段值做匹配,不需要对齐索引和长度,更适配跨表匹配的场景。
内容的提问来源于stack exchange,提问作者Tickets2Moontown
相关产品推荐
相关产品推荐

