【发布时间】:2023-01-08 08:40:16
【问题描述】:
我有一个如下所示的数据框,我需要计算平均权重。在 Excel 中,如果我使用 sumproduct 函数,我将得到 15.25 的结果。但是,当我使用以下代码时,它给了我 0。如何在代码中更正此问题?
import pandas as pd
df1 = { 'product1':['N/A'],
'product2':[15.25],
'p1 weight':[0],
'p2 weight':[4]}
df1=pd.DataFrame(df1)
df1.fillna(0,inplace=True)
cols_left = [c for c in df1.columns if 'product' in c]
cols_right = [c for c in df1.columns if 'weight' in c]
result = (df1[cols_left] * df1[cols_right]).sum(axis=1) / df1[cols_right].sum(axis=1)
df1['result'] = result
结果如下
请注意,我必须使用 cols_left 和 cols_right 方法,因为在我的实际工作情况下,我有 +100 列需要根据相应的列进行加权平均计算。
我没有像df1['result1'] = (df1['product1'] * df1['p1 weight'] + df1['product2'] * df1['p2 weight'] )/ df1['p1 weight'] + df1['p2 weight'] 那样进行硬编码,而是在和积计算之前将 cols_left 和 cols_right 中的所有相应列分别分组。
非常感谢任何建议。
【问题讨论】:
-
使用 numpy 和 pandas 有几种方法可以做到这一点。 Numpy 会更干净,但如果你想要一个纯粹的 pandas 解决方案,你可能需要编写更多代码。查看下面我的答案以获取两者的示例。