我有两个数据框,如下所示;我想将df1的每一列与df2中相应行中的每个值相乘。每次应产生一个新列。 (最好通过示例进行说明)。
Df1(在我的实际问题中,有+1000行)
'Fert 1' 'Fert 2' 'Fert 3'
A 1000 900 800
B 100 90 80
C 10 9 8
D 0.1 0.9 0.8
Df2(较小的df,其中行名与df1列名相同)
'L1' 'L2'
'Fert 1' 1 0.5
'Fert 2' 2 0
'Fert 3' 1 0.5
所需结果:基本上,我希望将df1乘以df2并进行扩展(我希望列名是多索引的)。尽管无法以这种方式获取正确的列标题,但我可以使用嵌套循环来做到这一点。循环似乎是一种低效的方法,因为随着我的数据集越来越大,循环变得越来越慢。我希望可以使用merge或concat来完成此操作,但我无法解决。
'Fert 1' 'Fert 2' 'Fert 3'
'L1' 'L2' 'L1' 'L2' 'L1' 'L2'
A 1000 500 1800 0 800 400
B 100 50 180 0 80 40
C 10 5 18 0 8 4
D 0.1 0.05 1.8 0 0.8 0.4
感谢您的帮助!
答案 0 :(得分:3)
用DataFrame.stack
创建MultiIndex
,用DataFrame.reindex
重复列,因此可以用DataFrame.mul
用Series
重复:
s = Df2.stack()
df = Df1.reindex(s.index, axis=1, level=0).mul(s)
print (df)
'Fert 1' 'Fert 2' 'Fert 3'
'L1' 'L2' 'L1' 'L2' 'L1' 'L2'
A 1000.0 500.00 1800.0 0.0 800.0 400.0
B 100.0 50.00 180.0 0.0 80.0 40.0
C 10.0 5.00 18.0 0.0 8.0 4.0
D 0.1 0.05 1.8 0.0 0.8 0.4