将 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)
我有两个数据框,都有 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)