首页 > 解决方案 > 获取另一个系列中一个系列的元素的索引列表

问题描述

抱歉标题令人困惑,但我不知道如何在没有示例的情况下解释这一点。

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

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),我会得到一个布尔值数组。有没有办法获取元素的索引而不是这个?或者使用其他方法解决这个问题的任何其他方法?

标签: pythonpandasnumpyseries

解决方案


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

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

如果某些值与np.whereand不匹配,则解决方案any

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]

推荐阅读