You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中实现两个DataFrame的特定乘法运算?

实现两个Pandas DataFrame的特定乘法运算

问题描述

现有两个Pandas DataFrame:
第一个DataFrame(df1):

ABC
A123
B331
C211

第二个DataFrame(df2):

de
d0.20.3
e0.10.4

需要将两者进行特定乘法运算,生成**多层行索引(df1索引 + df2索引)和多层列索引(df1列名 + df2列名)**的结果,每个位置的值为df1[i,j] * df2[k,l](其中i是df1行索引,j是df1列名,k是df2行索引,l是df2列名)。

简便实现方法

可以利用Pandas的广播机制和多层索引构造快速实现,步骤如下:

  1. 初始化示例DataFrame:
import pandas as pd

# 第一个DataFrame
df1 = pd.DataFrame(
    [[1, 2, 3], [3, 3, 1], [2, 1, 1]],
    index=['A', 'B', 'C'],
    columns=['A', 'B', 'C']
)

# 第二个DataFrame
df2 = pd.DataFrame(
    [[0.2, 0.3], [0.1, 0.4]],
    index=['d', 'e'],
    columns=['d', 'e']
)
  1. 执行运算并构造结果:
# 通过广播实现元素级乘法,得到三维数组
result_array = df1.values[:, :, None] * df2.values[None, None, :]

# 构建多层行索引:df1索引与df2索引的笛卡尔积
row_multi_idx = pd.MultiIndex.from_product([df1.index, df2.index])
# 构建多层列索引:df1列名与df2列名的笛卡尔积
col_multi_idx = pd.MultiIndex.from_product([df1.columns, df2.columns])

# 将三维数组转换为多层索引DataFrame
result_df = pd.DataFrame(
    result_array.reshape(-1, result_array.shape[1] * result_array.shape[2]),
    index=row_multi_idx,
    columns=col_multi_idx
)

执行后得到的result_df完全符合需求,例如前几行结果如下:

A        B       C
    d   e   d   e    d    e
A d 0.2 0.3 0.4 0.6  0.6  0.9
  e 0.1 0.4 0.2 0.8  0.3  1.2
B d 0.6 0.9 0.6 0.9  0.2  0.3
...

另一种简洁写法

也可以用pd.concat结合apply实现,代码更紧凑:

result_df = pd.concat([df1.apply(lambda col: col[:, None] * df2) for col in df1.columns], axis=1)

内容的提问来源于stack exchange,提问作者Pavel Novoselov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 05:55:11