从列表中的pandas系列中查找值并返回匹配的索引

时间:2018-02-12 21:44:28

标签: python pandas

有没有办法在没有循环的情况下做到这一点?

我正在考虑这样的事情:

pd_series = pd.Series(["c", "d", "a", "b"])
list_map  = ["a", "b", "c", "d"]
In [1]: pd_series.find_in(list_map)
Out [1]: 
0    2
1    3
2    0
3    1

谢谢!

2 个答案:

答案 0 :(得分:3)

假设元素是唯一的,您可以使用实际地图而不是列表:

>>> actual_map = dict(zip(list_map, range(len(list_map))))
>>> actual_map
{'d': 3, 'b': 1, 'a': 0, 'c': 2}
>>> pd_series.map(actual_map)
0    2
1    3
2    0
3    1
dtype: int64

答案 1 :(得分:1)

您可以使用np.vectorize + get_loc

np.vectorize(pd.Index(pd_series).get_loc)(list_map)
Out[499]: array([2, 3, 0, 1])