pandas panda或numpy上的逐行乘法

yshpjwxd  于 2023-02-02  发布在  其他
关注(0)|答案(1)|浏览(115)

我有一个包含类和两个组件的 Dataframe ,第二个包含元素和相同的组件。
DF1:

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

DF2:

df2 = pd.DataFrame({'Element':['K', 'Mg'], 'comp1':[3, -4], 'comp2':[1, 3]})

我想将它们逐行相乘,以生成以下输出:

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

你能帮帮我吗?

s3fp2yjn

s3fp2yjn1#

好吧,就像我看到的,它就像笛卡尔积,然后像上面提到的那样,对期望的输出进行一些操作。

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]}) 
#merging data
output  = df1.merge(df2, how='cross')

output['comp1'] = output.pop('comp1_x') * output.pop('comp1_y')
output['comp2'] = output.pop('comp2_x') * output.pop('comp2_y')
print(output)

expected = pd.DataFrame({'Class': ['banana', 'banana', 'apple', 'apple'], 'Element': ['K', 'Mg', 'K', 'Mg'], 'comp1':[3, -4, 6, -8], 'comp2':[-5, -15, 4, 12]})
print(expected.equals(output)) # True
'''
    Class Element  comp1  comp2
0  banana       K      3     -5
1  banana      Mg     -4    -15
2   apple       K      6      4
3   apple      Mg     -8     12

'''

相关问题