NumPy中与Pandas Series.map等价的功能是什么?

4
我有一个查找值的字典 dictionary = {'a': 1, 'b': 2, 'c': 3, 'd': 3}

我想从numpy中得到的结果是,当传入字典时,pandas.Series.map()返回的结果。例如:series.map(dictionary, na_action='ignore')

注意:这个series.map()函数非常快,这让我相信在numpy API中一定有一个相应的函数,而不是我实现一些涉及numpy.where()和循环遍历字典键的解决方案。

对于一般(非字典)情况,请参见在numpy数组上映射函数的最有效方法 - jpp
1个回答

4

这是一个NumPy的例子 -

def map_series_by_dict(s, d):
    a = s.values
    v = np.array(list(d.values()))
    k = np.array(list(d.keys()))    
    sidx = k.argsort()
    out_ar = v[sidx[np.searchsorted(k,a,sorter=sidx)]]
    return pd.Series(out_ar, index=s.index)

示例运行 -

In [143]: d
Out[143]: {'a': 1, 'b': 2, 'c': 3, 'd': 3}

In [144]: s
Out[144]: 
0    a
1    a
2    c
3    b
4    a
dtype: object

In [145]: map_series_by_dict(s, d)
Out[145]: 
0    1
1    1
2    3
3    2
4    1

如果我理解正确,这个因式分解输入值,这样你就不必对每个值单独调用dict.get了吗?我猜这就是sidx+np.searchsorted的目的。如果是这样的话,值得注意的是,这就是为什么它比通用的np.vectorizedict.get更快的原因。 - jpp
此外,你的回答也可以放在这里:根据键将numpy数组中的每个元素进行翻译,这样可能会获得更多的浏览量和赞数 :). - jpp
2
@jpp 嗯,从字典中提取值和键的部分可以被视为设置开销,之后应该进行向量化处理。很好找到了更广泛的问答。我会提醒自己尽快基于此添加searchsorted功能,谢谢! - Divakar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接