我正在尝试手动使用熊猫Index
来促进键值和位置之间的双向查找。
假设我有一个索引:
index = pd.Index(['a', 'b', 'c', 'd'])
如果我想将头寸转换为指数,这很容易:
index[pd.Series([0,3,2,0,0,1])
产量'a', 'd', 'c', 'a', 'a', 'b'
.
但是,我找不到批量执行另一个方向的方法:给定一系列键,如何确定它们的位置?
index.???[pd.Series(['b', 'c', 'a'])]
我要1, 2, 0
.我可以对带有get_loc
的单个枚举执行此操作,但该函数没有矢量化。
Pandas似乎在幕后这样做 - 否则.loc
查找如何工作?- 但我无法从Python代码中找到公开的方法。 如果它以某种方式暴露在 Cython 中,那是可以接受的;我的用例是准备数组以传递给 Cython 例程以优化计算。
Index.get_indexer
方法是关键。熊猫似乎将基于位置的选择器称为"索引器";get_indexer()
方法获取给定值数组的此类索引器。
>>>> index.get_indexer(pd.Series(['b', 'c', 'a']))
array([1, 2, 0], dtype=int64)