我正在尝试手动使用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例程以优化计算。
答案 0 :(得分:1)
Index.get_indexer
方法是关键。熊猫似乎将基于位置的选择器称为“索引器”。给定一个值数组,get_indexer()
方法将获得这样的索引器。
>>>> index.get_indexer(pd.Series(['b', 'c', 'a']))
array([1, 2, 0], dtype=int64)