Skip to main content
 首页 » 编程设计

python之NumPy 中的 Pandas Series.map 等价物

2024年08月15日38me-sa

我有一个查找值的字典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 的 -

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) 

sample 运行-

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