如何使用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
相关产品推荐
相关产品推荐

