Python 单独列表中数据帧列值的矢量化查找

Python 单独列表中数据帧列值的矢量化查找,python,pandas,dataframe,optimization,vectorization,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

我正在寻找一种快速(矢量化)的方法来使用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
然而,对于大型数据集,循环是非常不受欢迎和缓慢的

请问有没有办法优化这一点

我已经探索了一些pandas功能,如“查找”,但这似乎需要每个大小的数组,而在我的例子中,我需要从外部列表中查找值,并且与数据帧的大小不同。

您可以将字典查找到所需的列,即

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

我提倡这种方法。谢谢,与循环相比,它的速度提高了约5倍。