我对此不是 100% 的,但是进行外部联接并删除 NA 与内部联接相同。因此,在没有匹配索引的情况下,您只会得到一个空数据框。如果我们修改您的示例以包含一条匹配记录,则情况似乎是这样:
import pandas as pd
d1 = pd.DataFrame({
'i1': [1, 2, 2],
'i2': [1, 1, 2],
'a': [10,20,30]}).set_index(['i1', 'i2'])
d2 = pd.DataFrame({
'i1': [1, 3],
'i2': [1, 2],
'b': [40, 50]}).set_index(['i1', 'i2'])
d3 = d1.join(d2, how='outer').dropna()
d4 = d1.join(d2, how='inner')
这使:
In [9]: d3
Out[9]:
a b
i1 i2
1 1 10 40
In [10]: d4
Out[10]:
a b
i1 i2
1 1 10 40
所以在外连接 + 之后dropna(),您可以看到有多少行d3并从那里开始。使用您的原始示例:
import pandas as pd
d1 = pd.DataFrame({
'i1': [1, 2, 2],
'i2': [1, 1, 2],
'a': [10,20,30]}).set_index(['i1', 'i2'])
d2 = pd.DataFrame({
'i1': [3, 3],
'i2': [1, 2],
'b': [40, 50]}).set_index(['i1', 'i2'])
d3 = d1.join(d2, how='outer').dropna()
print(d3.shape) # no error, shows "(0, 2)"