如何使大熊猫用于交叉乘法

问题描述 投票:0回答:1

我有3个数据框:

df1

id,k,a,b,c
1,2,1,5,1
2,3,0,1,0
3,6,1,1,0
4,1,0,5,0
5,1,1,5,0

df2

name,a,b,c
p,4,6,8
q,1,2,3

df3

type,w_ave,maximum,minimum
n,3,5,6
v,2,1,4

从乘积,使用熊猫和numpy,我要在df1中输出:

id,k,a,b,c,w_ave,maximum,minimum
1,2,1,5,1,16,15,18
2,3,0,1,0,0,3,6
3,6,1,1,0,5,4,7
4,1,0,5,0,0,11,14
5,1,1,5,0,13,12,15

条件为:新列的值将为=

#its not a code
df1["w_ave"][1] = df3["w_ave"]["v"]+ df1["a"][1]*df2["a"]["q"]+df1["b"][1]*df2["b"]["q"]+df1["c"][1]*df2["c"]["q"]
for output["w_ave"][1]= 2 +(1*1)+(5*2)+(1*3)
df3["w_ave"]["v"]=2
df1["a"][1]=1, df2["a"]["q"]=1 ;
df1["b"][1]=5, df2["b"]["q"]=2 ;
df1["c"][1]=1, df2["c"]["q"]=3 ;

这是指:-将在df1中从df3中的列名称中添加一个新列。-对于df1的每一行,a,b,c的值将与df2中的同名q值相乘。并与相应的df3值相加。-df1的列名,匹配的将与df2的列名相乘。另一个不匹配的列将不会相乘,例如df1 [k]。-但是,如果df1 [“ a”]中有0,则相应的输出将为零。

我为此感到挣扎。也很难解释。我的尝试很愚蠢。我知道这种尝试是行不通的。但是,我添加了这个:

import pandas as pd, numpy as np

data1 = "Sample_data1.csv"
data2 = "Sample_data2.csv"
data3 = "Sample_data3.csv"

folder = '~Sample_data/'
df1 =pd.read_csv(folder + data1)
df2 =pd.read_csv(folder + data2)
df3 =pd.read_csv(folder + data3)

df1= df2 * df1
pandas multiplying
1个回答
0
投票

好,所以这绝不会像您想要的输出,而是将您提供的公式向量化:

df2=df2.set_index("name")
df3=df3.set_index("type")
df1["w_ave"] = df3.loc["v", "w_ave"]+ df1["a"].mul(df2.loc["q", "a"])+df1["b"].mul(df2.loc["q", "b"])+df1["c"].mul(df2.loc["q", "c"])

输出:

   id  k  a  b  c  w_ave
0   1  2  1  5  1     16
1   2  3  0  1  0      4
2   3  6  1  1  0      5
3   4  1  0  5  0     12
4   5  1  1  5  0     13
© www.soinside.com 2019 - 2024. All rights reserved.