如何使用另一个数据帧中的指令在Python数据帧上执行算术?

如何使用另一个数据帧中的指令在Python数据帧上执行算术?,python,pandas,dataframe,Python,Pandas,Dataframe,几个月前我问了R这个问题,得到了一个我经常使用的很好的答案。现在我正在尝试转换到Python,但我害怕尝试重写这个代码段。现在,在尝试之后,我无法翻译我得到的答案(或者通过搜索找到任何类似的答案) 问题是:我有一个数据框,我想在其中添加新列,计算依赖于另一个包含指令的数据框中的值 我在下面创建了一个可复制的示例(尽管实际上还有很多列和许多行,所以速度很重要,如果可能的话,我希望避免循环): 输入数据帧: import pandas as pd; data = {"A":[&q

几个月前我问了R这个问题,得到了一个我经常使用的很好的答案。现在我正在尝试转换到Python,但我害怕尝试重写这个代码段。现在,在尝试之后,我无法翻译我得到的答案(或者通过搜索找到任何类似的答案)

问题是:我有一个数据框,我想在其中添加新列,计算依赖于另一个包含指令的数据框中的值

我在下面创建了一个可复制的示例(尽管实际上还有很多列和许多行,所以速度很重要,如果可能的话,我希望避免循环):

输入数据帧:

import pandas as pd;
data = {"A":["orange","apple","banana"],"B":[5,3,6],"C":[7,12,4],"D":[5,2,7],"E":[1,18,4]}
data_df = pd.DataFrame(data)

key = {"cols":["A","B","C","D","E"],"include":["no","no","yes","no","yes"],"subtract":["na","A","B","C","D"],"names":["na","G","H","I","J"]}
key_df = pd.DataFrame(key)
所需输出(与数据相同,但有2个新列):

因此,对于基本数据帧中的每一列,关键数据帧都有一行,并且它有一个“include”列,如果要进行任何计算,则必须将该列设置为“yes”。当设置为“yes”时,我想添加一个新列,该列的定义名称减去定义的列(从关键数据帧中查找)

例如,基本数据框中的列“C”被包括在内,因此我想创建一个名为“H”的新列,它是列“C”的值减去列“B”的值

p、 这里是R的答案,以防触发比我更熟练的人的任何思维过程

k <- subset(key, include == "yes")
output <- cbind(base,setNames(base[k[["cols"]]]-base[k[["subtract"]]],k$names))

k为
中的
值筛选
包括

yes = key_df.loc[key_df.include.eq("yes"), ["cols", "subtract", "names"]]  

  cols  subtract    names
2   C       B       H
4   E       D       J
创建yes值的字典,并在方法中解包:


筛选
include
中的
yes
值:

yes = key_df.loc[key_df.include.eq("yes"), ["cols", "subtract", "names"]]  

  cols  subtract    names
2   C       B       H
4   E       D       J
创建yes值的字典,并在方法中解包:

yes_values = { name: data_df[col] - data_df[subtract] 
               for col, subtract, name 
               in yes.to_numpy()}

data_df.assign(**yes_values)

        A   B   C   D   E   H   J
0   orange  5   7   5   1   2   -4
1   apple   3   12  2   18  9   16
2   banana  6   4   7   4   -2  -3