pandas多级列单索引DataFrame自连接合并报错问题咨询
问题根源
第一个错误 ValueError: len(right_on) must equal the number of levels in the index of "left" 原因
你的左表行索引是单级索引,left_index=True参数表示需要用左表1个级别的行索引作为连接键,对应右表也需要传入1个连接键。但你给right_on传入的是长度为2的元组('index1',''),pandas会默认将元组的每个元素识别为独立的连接键,即认为你要匹配右表的2个字段,键的数量和左表索引级数不匹配,因此报错。
第二个错误 KeyError: '' 原因
pd.merge的left_on/right_on参数接收可迭代对象时,会将每个元素解析为单独的连接键。你直接传入元组('index',''),pandas会拆分去查找左表中名为index和名为''的两个独立列,而你的表中不存在名为''的单列,因此抛出键不存在的错误。
你用.loc可以正常取值是因为.loc原生支持将元组解析为多级列/行的单个完整键名,和merge参数的解析逻辑不同。
正确解决方案
场景1:用左表行索引匹配右表的index1多级列
将多级列的完整元组包裹在列表中,明确告知pandas这是1个连接键:
pd.merge(left, right, left_index=True, right_on=[('index1', '')], suffixes=('_n','_p'))
场景2:左右表均使用表内多级列作为连接键
将两个多级列的元组分别包裹在列表中传入:
pd.merge(left, right, left_on=[('index', '')], right_on=[('index1', '')], suffixes=('_n','_p'))
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

