如何基于行索引合并三个DataFrame且无需将索引转为列?
基于行索引合并多DataFrame的实现方案
你不需要将行索引转为普通列即可完成合并,pandas提供了原生支持索引关联的合并接口,以下是三种常用实现方式:
方法1:修改merge参数适配索引关联
pd.merge提供了left_index和right_index两个布尔参数,设置为True即可指定用左右表的行索引作为关联键,你原有基于reduce的写法只需调整merge参数即可:
from functools import reduce dfs = [result_eu_SpeciesNameGenuine, result_ieu_SpeciesNameGenuine, result_cosine_SpeciesNameGenuine] # how参数可按需调整为'outer'/'left'/'right' df_final = reduce(lambda left,right: pd.merge(left, right, left_index=True, right_index=True, how='inner'), dfs)
方法2:使用join方法(多表索引合并最优写法)
DataFrame内置的join方法默认基于行索引做关联,支持直接传入DataFrame列表批量合并,无需额外引入reduce,写法更简洁:
# how参数可按需调整,多表存在重名列时可通过lsuffix/rsuffix指定后缀区分 df_final = result_eu_SpeciesNameGenuine.join( [result_ieu_SpeciesNameGenuine, result_cosine_SpeciesNameGenuine], how='inner' )
方法3:使用concat横向拼接(适合纯对齐场景)
如果你的需求只是按索引对齐拼接多表的所有列,不需要特殊关联逻辑,直接用pd.concat设置横向拼接即可,默认按索引对齐:
# join参数默认是'outer',需要取索引交集时设置为'inner' df_final = pd.concat(dfs, axis=1, join='inner')
内容的提问来源于stack exchange,提问作者SysEng
相关产品推荐
相关产品推荐

