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