获取另一个系列中一个系列的元素索引列表

时间:2021-05-13 11:41:40

标签: python pandas numpy series

抱歉,标题令人困惑,但如果没有示例,我不知道如何解释。

我需要从另一个系列中的一个系列中获取项目位置列表。我给出的例子如下:

ser1 = pandas.Series([10, 9, 6, 5, 3, 1, 12, 8, 13])
ser2 = pandas.Series([1, 3, 10, 13])

解决方案应该是[5, 4, 0, 8]

我首先想到使用 numpy.where(ser1.isin(ser2)) 但我得到的 idex 数组顺序错误:[0, 4, 5, 8]

如果我使用 ser2.isin(ser1),我会得到一个布尔值数组。有没有办法获得元素的索引而不是这个?或者用其他方法解决这个问题?

1 个答案:

答案 0 :(得分:1)

在 numpy 中使用广播与 argmax 进行比较以获得正确的排序:

out = (ser2.to_numpy() == ser1.to_numpy()[:, None]).argmax(axis=0)
[5, 4, 0, 8]

如果某个值与 np.whereany 不匹配的解决方案:

ser1=pd.Series([10, 9, 6, 1, 3, 1, 12, 8, 13])
ser2 = pd.Series([1, 3, 10, 130])

m = ser2.to_numpy() == ser1.to_numpy()[:, None]
out = np.where(m.any(axis=0), m.argmax(axis=0), np.nan)
print (out)
[ 3.  4.  0. nan]