【发布时间】:2016-01-20 19:40:19
【问题描述】:
这可能是错误的通用方法,但我正在尝试使用 Pandas 系列作为一些字符串/标签的 numpy 数组的查找表:
import pandas as pd
import numpy as np
data_map = pd.Series([2, 4, 6, 0, 1], index=list('abcde'))
lab1d = np.array(['a', 'd', 'd', 'c'])
lab2d = np.array([['d', 'e'],
['e', 'd'],
['c', 'a'],
['a', 'b']])
val1d = data_map.loc[lab1d]
val2d = data_map.loc[lab2d]
如果我这样做,val1d 会正确解析为:
a 2
d 0
d 0
c 6
dtype: int64
但是val2d = data_map.loc[lab2d] 提出了ValueError:
ValueError: Cannot index with multidimensional key
我想我明白了这不起作用的原因,但正确的方法是获取包含索引值的大小 (m x n) 的 numpy.ndarray 并返回(可以转换为的东西)numpy.ndarray size (m x n) 包含对应的值吗?
编辑
我曾考虑将数据存储在字典中并使用numpy.vectorize(如this question 所示),这绝对是我的后备方案,但我想澄清一下我有兴趣知道是否有办法使用一些 pandas 方法。
编辑 2 我应该澄清一下,我实际上是在寻找遵循广播规则的东西,例如:
dmd = data_map.to_dict()
make_map = np.vectorize(dmd.__getitem__)
val1d = make_map(lab1d)
val2d = make_map(lab2d)
val1d 的返回值:
array([2, 0, 0, 6])
对于 val2d 返回:
array([[0, 1],
[1, 0],
[6, 2],
[2, 4]])
【问题讨论】:
-
注意:如果我的“编辑 2”示例基本上是执行此操作的“正确”方式,那么我认为这个问题可以作为 the linked question 的副本关闭。
标签: python arrays numpy pandas vectorization