三个含4个共同列与1个唯一列的DataFrame合并报错如何解决
报错原因
pandas的merge方法仅支持单次传入两个DataFrame做合并,你直接传入DF1,DF2,DF3三个参数触发了逻辑歧义,才会返回该报错。
正确实现方案
方案1:链式合并(适合少量表合并场景)
分两次完成合并,先合并前两个表得到临时表,再用临时表和第三个表合并:
# 合并DF1、DF2得到临时表 temp_df = pd.merge(DF1, DF2, on=['BHID','FROM','TO','SAMP ID'], how='inner') # 临时表和DF3合并得到最终结果 FinalDF = pd.merge(temp_df, DF3, on=['BHID','FROM','TO','SAMP ID'], how='inner')
方案2:reduce批量合并(适合多表扩展场景)
如果后续可能新增更多同结构DataFrame,用functools.reduce做批量合并更简洁:
from functools import reduce # 把所有待合并的DataFrame存入列表 df_list = [DF1, DF2, DF3] # 批量完成多表匹配合并 FinalDF = reduce( lambda left, right: pd.merge(left, right, on=['BHID','FROM','TO','SAMP ID'], how='inner'), df_list )
注意:如果不需要仅保留四个字段在三个表中都完全匹配的行,可以把
how参数从inner改成outer,即可保留所有匹配到的行,未匹配到的元素列位置自动填充空值。
内容的提问来源于stack exchange,提问作者Michael Ray
相关产品推荐
相关产品推荐

