如何将一个数据帧中的每一列与另一个数据帧熊猫中的一行相乘?

时间:2019-11-21 12:30:58

标签: python pandas dataframe

我有两个数据框,如下所示;我想将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

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

DataFrame.stack创建MultiIndex,用DataFrame.reindex重复列,因此可以用DataFrame.mulSeries重复:

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