将 Python 中两个数据框中的两列相乘并求和

multiply and sum two columns in two dataframes in Python

我有两个数据框,都有 6 行。我想将两个数据框中的两个选定列中的值相乘(每个 df 一个)

result = sum(a * b for a, b in zip(list(df1['col1']), list(df2['col3'])))

我好像没有得到我想要的。我在 Excel 中“手动”进行了计算(对于我的时间序列中的一个日期),这给了我预期的结果。所以我的问题是我是不是做错了什么?

如果相同的行数和相同的索引简单相减然后使用sum:

result = (df1['col1'] * df2['col3']).sum()

如果可能,索引不同但长度相同:

result  = (df1['col1'] * df2['col3'].to_numpy()).sum()

或使用numpy.dot:

result = np.dot(df1['col1'],  df2['col3'])

如果可能,不同的长度和不同的索引:

result = (df1['col1'].reset_index(drop=True)
             .mul(df2['col3'].reset_index(drop=True), fill_value=1).sum()

你可以这样做:

import pandas as pd 
import numpy as np 

df1 = pd.DataFrame({'col1':[0, 1, 2, 3, 4, 5]})
df2 = pd.DataFrame({'col1':[0, 1, 2, 3, 4, 5]})

result = np.matmul(df1.col1, df2.col1)

这也会对乘法求和。

如果您添加 []:

,您的公式也有效
result = sum([a * b for a, b in zip(list(df1['col1']), list(df2['col1']))])

这给出了相同的结果。

您只需使用 pandas 抽象即可。

result = df['col1'] * df['col3']

如果你想得到这些结果值的总和,你可以这样做:

sum(results)