繁体   English   中英

在 pandas 或 numpy 上逐行乘法

[英]Row by row multiplication on pandas or numpy

我有一个 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 的方式逐行相乘:

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

你可以帮帮我吗?

正如我所见,它就像笛卡尔积。 然后如前所述对所需的 output 进行一些操作。

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


'''

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM