如果我有2个Pandas数据框索引idx1和idx2,如何获取交集的索引位置(从原始索引):

idx1 = pd.Index([1, 2, 3, 4])
idx2 = pd.Index([3, 4, 5, 6])
intersect = idx1.intersection(idx2)


为idx1寻找[2,3],为idx 2寻找[0,1]。

这不起作用:

idx1.get_loc(intersect)


我可以做一个循环来获取这些值,但是还有什么更好的方法吗?

for x in intersect:
    print(idx1.get_loc(x))

最佳答案

如果索引是唯一的,则可以使用get_indexer

idx1.get_indexer(intersect)
# array([2, 3])

idx2.get_indexer(intersect)
# array([0, 1])


如果索引不是唯一的,则需要使用isinnumpy.where方法:

pd.np.where(idx1.isin(intersect))[0]
# array([2, 3])

pd.np.where(idx2.isin(intersect))[0]
# array([0, 1])

10-01 10:51