在单独的列表中对Pandas数据帧列值进行矢量化查找

时间:2018-02-18 02:09:43

标签: python pandas dataframe optimization vectorization

我正在寻找一种使用Pandas数据帧内容进行计算的快速(矢量化)方法。

我的数据框每行包含2个标签,我想查找与每个标签相对应的值(来自字典/列表)并执行计算,将结果返回到数据框中的新列。

我在下面使用循环来包含我的工作示例。

label1s = np.array(['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'], dtype=str)
label2s = np.array(['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'], dtype=str)
data = np.column_stack([label1s, label2s])

label_values = {'A':1, 'B':2, 'C':3}

df = pd.DataFrame(data=data, columns=['Label1', 'Label2'])

new_col = np.zeros_like(label1s, dtype=float)

for index, row in df.iterrows():
    val1 = label_values[row['Label1']]
    val2 = label_values[row['Label2']]
    new_col[index] = val1 - val2

df['result'] = new_col
df

但是,对于大型数据集,循环非常不受欢迎且速度很慢。

有没有办法优化这个?

我已经探索了一些像#34; Lookup"这样的pandas功能,但这似乎想要每个大小的数组,而在我的情况下,我需要从外部列表和不同大小的列表中查找值到数据框。

1 个答案:

答案 0 :(得分:2)

你可以map字典到所需的列,即

df['result'] = df.Label1.map(label_values) - df.Label2.map(label_values)