尽管不直接支持这些功能,但是可以在尝试连接之前通过调整索引来实现它们。
您可以使用-
运算符设置减号:
In [11]: ind = pd.Index([1, 2, 3])
In [12]: ind2 = pd.Index([3, 4, 5])
In [13]: ind - ind2
Out[13]: Int64Index([1, 2], dtype='int64')
并与和设置|
交集与&
:
In [14]: ind | ind2
Out[14]: Int64Index([1, 2, 3, 4, 5], dtype='int64')
In [15]: ind & ind2
Out[15]: Int64Index([3], dtype='int64')
因此,如果您的某些DataFrame具有这些索引,则可以 在 加入 之前 重新索引:
In [21]: df = pd.DataFrame(np.random.randn(3), ind, ['a']) # ind = df.index
In [22]: df2 = pd.DataFrame(np.random.randn(3), ind2, ['b']) # ind2 = df2.index
In [23]: df.reindex(ind & ind2)
Out[23]:
a
3 1.368518
现在,您可以建立所需的任何联接:
In [24]: df.reindex(ind & ind2).join(df2.reindex(ind & ind2)) # equivalent to inner
Out[24]:
a b
3 1.368518 -1.335534
In [25]: df.reindex(ind - ind2).join(df2.reindex(ind - ind2)) # join on A set minus B
Out[25]:
a b
1 1.193652 NaN
2 0.064467 NaN