python - 如何将数据框中的每一列与另一个数据框 Pandas 中的一行相乘?

标签 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(行名称与 df1 列名称相同的较小 df)

            'L1'  'L2' 
'Fert 1'     1     0.5   
'Fert 2'     2     0
'Fert 3'     1     0.5

期望的结果:基本上我想要 df1 乘以 df2 并展开(我希望列名是多索引的)。我可以使用嵌套循环来完成它,尽管我无法通过这种方式获得正确的列标题。循环似乎是一种低效的方法,因为它在我的大数据集上变慢了。我希望它可以使用合并或连接来完成,但我无法解决。

        '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

感谢您的帮助!

最佳答案

通过 DataFrame.stack 创建 MultiIndex , 按 DataFrame.reindex 重复列所以可能是 SeriesDataFrame.mul 的倍数:

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

关于python - 如何将数据框中的每一列与另一个数据框 Pandas 中的一行相乘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58975135/

相关文章:

python - Pandas:使用 iloc 根据条件更改 df 列值

python - 列出 Pandas DataFrame - Python 3.x

python - Pandas DataFrame 分组

r - R中的左移列

python - 如果 Pandas 中两个单元格为空,则填充 .fillna 列

Python - 在 Pandas DataFrame 中取消嵌套单元格

python - 是否有获取每组数据框中唯一值数量的函数?

python - 使用 pandas 0.13 导入多级索引 csv 数据

python - 高效/优雅地将方法应用于对象的 numpy ndarray 或从中获取属性

python-3.x - 根据 groupby 和 TimeGrouper 之后的列条件从 pandas 数据框中获取行