如何将一系列键转换为具有 Pandas 索引的位置?



我正在尝试手动使用熊猫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)

最新更新