我有两个数据帧df1和df2。这两个数据帧具有相同的索引UNKNOWN,分别为step1,step2,step3。
df1:
FE F1 F2
C_Step
UNKNOWN 0.336134 0.165289
step1 0.126050 0.371901
step2 0.201681 0.297521
step3 0.336134 0.165289
df2:
DT D1 D2
RE E1 E2 E3 E1 E2 E3
C_Step
UNKNOWN 0.571429 0.000 0.219780 0.0 0.5 0.000000
step1 0.428571 0.000 0.164835 1.0 0.0 0.555556
step2 0.000000 0.375 0.395604 0.0 0.0 0.444444
step3 0.000000 0.625 0.219780 0.0 0.5 0.000000
我想对df1和df2的 EACH 列进行乘法和加法运算。生成的数据帧(df3)的结构如下所示(数据帧df1的每一列以及df2的每一列)。
1)所有 UNKNOWN 索引均应填充零。
2)其他索引:(df1 * df2的未知索引)+(df2 * df1的未知索引)
例如:在第一列中,
“未知”的值:0.00000
“ step1”索引的值:(0.126050 * 0.571429)+(0.428571 * 0.336134)= 0.21609
“ step2”的值: (0.201681 * 0.571429)+(0.00000 * 0.336134)= 0.11525
第3步的值: (0.336134 * 0.571429)+(0.0000 * 0.336134)= 0.19208
对于所有其他多级列依次如此
df3:示例
DT D1 D2 \
RE E1 E2 E3 E1 E2 E3
FE F1 F2 F1 F2 F1 F2 F1 F2 F1 F2 F1
C_Step
UNKNOWN 0.00000 0 0 0 0 0 0 0.....
step1 0.21609 ...
step2 0.11525
step3 0.19208
DT
RE
FE F2
C_Step
UNKNOWN 0
step1
step2
step3
答案 0 :(得分:0)
假设d1是第一个数据帧,d2是第二个数据帧。
import pandas as pd
from functools import reduce
from operator import mul
from itertools import product
#second multiplication
m1 = d1.copy() #unknown values
s = m1.iloc[0].values
for i in range(0,4):
m1.iloc[i] = s
m1.iloc[0] = 0
#print(m1)
m2 = d2.copy() #unknown values
s = m2.iloc[0].values
for i in range(0,4):
m2.iloc[i] = s
m2.iloc[0] = 0
#print(m2)
second1 = pd.concat({k: reduce(mul, (d[c] for d, c in zip([d1, m2], k)))for k in product(d1, d2)}, axis=1)
second2 = pd.concat({k: reduce(mul, (d[c] for d, c in zip([m1, d2], k)))for k in product(d1, d2)}, axis=1)
#add dataframes together
summation = sum([second1, second2])