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

如何使用Pandas或Numpy实现两个DataFrame的逐行对应乘法?

解决方案:两个DataFrame的笛卡尔积与组件列逐行乘法

输入数据

首先定义两个输入DataFrame:

import pandas as pd

df1 = pd.DataFrame({'Class':['banana', 'apple'], 'comp1':[1, 2], 'comp2':[-5, 4]})
df2 = pd.DataFrame({'Element':['K', 'Mg'], 'comp1':[3, -4], 'comp2':[1, 3]})

需求说明

需要生成所有Class与Element的组合,并对对应的comp1、comp2列进行逐行乘法,得到如下格式的输出:

output = pd.DataFrame({'Class': ['banana', 'banana', 'apple', 'apple'], 'Element': ['K', 'Mg', 'K', 'Mg'], 'comp1':[3, -4, 6, -8], 'comp2':[-5, -15, 4, 12]})

实现步骤

1. 生成笛卡尔积(全组合)

通过添加临时键的方式,将两个DataFrame进行全连接(笛卡尔积):

# 添加临时键
df1['key'] = 1
df2['key'] = 1

# 笛卡尔积合并
merged = pd.merge(df1, df2, on='key').drop('key', axis=1)

2. 计算组件列的乘积

对合并后的DataFrame,计算comp1和comp2的乘积:

merged['comp1'] = merged['comp1_x'] * merged['comp1_y']
merged['comp2'] = merged['comp2_x'] * merged['comp2_y']

3. 整理列顺序并删除冗余列

保留需要的列,并调整顺序为目标格式:

output = merged[['Class', 'Element', 'comp1', 'comp2']]

完整代码

import pandas as pd

# 定义输入DataFrame
df1 = pd.DataFrame({'Class':['banana', 'apple'], 'comp1':[1, 2], 'comp2':[-5, 4]})
df2 = pd.DataFrame({'Element':['K', 'Mg'], 'comp1':[3, -4], 'comp2':[1, 3]})

# 添加临时键实现笛卡尔积
df1['key'] = 1
df2['key'] = 1
merged = pd.merge(df1, df2, on='key').drop('key', axis=1)

# 计算组件列乘积
merged['comp1'] = merged['comp1_x'] * merged['comp1_y']
merged['comp2'] = merged['comp2_x'] * merged['comp2_y']

# 整理输出格式
output = merged[['Class', 'Element', 'comp1', 'comp2']]
print(output)

运行后得到的output即为目标结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:50:29