熊猫全外部索引与 NaN 连接以用于不匹配的索引



尝试对这两个 Pandas 数据帧执行完整的外部连接:

df1 = pd.DataFrame({'a': [1,2,1], 'b': [1,1,2], 'c': [1,2,3]}).set_index(['a', 'b'])
df2 = pd.DataFrame({'a': [1,2,3], 'd': [11,12,13]}).set_index(['a'])
>>> df1
     c
a b   
1 1  1
2 1  2
1 2  3
>>> df2
    d
a    
1  11
2  12
3  13

我继续像这样合并这两者:

>>> df1.merge(df2, how='outer', left_index=True, right_index=True)
     c   d
a b       
1 1  1  11
2 1  2  12
1 2  3  11

虽然我希望在此连接中也应该返回不匹配的索引,如下所示:

       c    d
a b       
1 1    1    11
2 1    2    12
3 NaN  NaN  13
1 2    4    11

你可以使用一个小技巧 - 按级别b reset_indexmerge和最后set_index b

df2 = df1.reset_index(level='b')
         .merge(df2, how='outer', left_index=True, right_index=True)
         .set_index('b', append=True)
print (df2)
         c   d
a b           
1 1.0  1.0  11
  2.0  3.0  11
2 1.0  2.0  12
3 NaN  NaN  13

我认为这就是您要找的,因为这不仅仅是一个连接,而是一个多索引连接。

pd.merge(df1.reset_index(), df2.reset_index(),on='a', how='outer').set_index(['a','b'])
         c   d
a b           
1 1.0  1.0  11
  2.0  3.0  11
2 1.0  2.0  12
3 NaN  NaN  13

它的输出相同,但在这种情况下索引是有序的。

最新更新