如何在数据框中矢量化此计算

How to Vectorize this calculation in dataframe

我有一个数据框和一本字典。字典保存整数,每个键有不同的整数。数据框中有一列保存这些键。我一直在尝试通过尽可能矢量化来提高脚本的速度。因为现在,我是数据框的迭代行。我如何对其进行矢量化?

字典:Dict = {Words1:[20,10],Words2:[10,20],Words3:[30,50]}

数据框:

  Col1      Col2
'Words1'    Yes
'Words2'    No
'Words3'    Yes

我试过: df['Col3'] = Dict[df['Col1']][1]。既然笑了,就知道没用。

我想做的是:

  1. 取字典中的第二个值,并根据Col1中的键将其放入Col3中。

  2. 然后我将采用 Col3 并根据 Col2 中的单词是否 Yes/No 计算 Col4 中的最终数字:

    a) 如果是,我将添加到 Col3

    中的数字

    b) 如果不是,我会从Col3中的数字中减去。

非常感谢您的帮助。

正在使用

df = pd.DataFrame({
    'Col1':['Words1','Words2','Words3'],
    'Col2':['Yes','No','Yes'],
    'vals':[1,2,3]})
my_dict = {'Words1':[20,10],'Words2':[10,20],'Words3':[30,50]}
val = 3

第一部分可以使用带有预处理字典的映射来解决

reduced_dict = { k : my_dict[k][1] for k in my_dict}
df['Col3'] = df['Col1'].map(reduced_dict)

第二部分可以通过将 Col2 映射到一个符号并将其乘以 add/subtract val

的值来简化
df['Col4'] = df['Col3'] + df.Col2.map({'Yes':1,'No':-1})*val

请注意,如果 add/subtract 的值是数据帧的一部分,这也适用

df['Col4'] = df['Col3'] + df.Col2.map({'Yes':1,'No':-1})*df.vals