Как заставить pandas работать на кросс-умножение - PullRequest
0 голосов
/ 31 января 2020

У меня есть 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,vac,yak
n,3,5,6
v,2,1,4

от умножения, используя pandas и numpy, я хочу вывод в df1:

id,k,a,b,c,w_ave,vac,yak
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 будет умножено на одноименное значение q из df2. и суммируется вместе с соответствующим значением 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

1 Ответ

0 голосов
/ 31 января 2020

Хорошо, так что это никоим образом не будет напоминать ваш желаемый результат, но векторизует формулу, которую вы предоставили:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...