如何迭代地为数据框列赋予权重以获得加权平均值?

ric*_*458 2 python weighted-average dataframe pandas

我有一个数据框,其中有多列具有数字浮点值。我想要做的是为每列赋予分数权重并计算其平均值以存储并将其附加到相同的 df 中。

假设我们有列:s1,s2,s3 我想分别赋予它们权重:w1,w2,w3

我可以在尝试手中的所有值时手动执行此操作。但是当我使用列表格式时,它给了我一个错误。我试图通过迭代来做到这一点,并且我在下面附加了我的代码,但它给了我一个错误。我还附上了我的手动代码,该代码有效,但它需要第一手资料。

不起作用的代码:

score_df["weighted_avg"] += weight * score_df[feature]
Run Code Online (Sandbox Code Playgroud)

手动代码可以工作但不能用于列表:

df["weighted_scores"] = 0.5*df["s1"] + 0.25*df["s2"] + 0.25*df["s3"]
Run Code Online (Sandbox Code Playgroud)

Erf*_*fan 5

我们可以为此使用 numpy 广播,因为权重与列轴具有相同的形状:

# given the following example df
df = pd.DataFrame(np.random.rand(10,3), columns=["s1", "s2", "s3"])

print(df)
    s1   s2   s3
0 0.49 1.00 0.50
1 0.65 0.87 0.75
2 0.45 0.85 0.87
3 0.91 0.53 0.30
4 0.96 0.44 0.50
5 0.67 0.87 0.24
6 0.87 0.41 0.29
7 0.06 0.15 0.73
8 0.76 0.92 0.69
9 0.92 0.28 0.29
Run Code Online (Sandbox Code Playgroud)
weights = [0.5, 0.25, 0.25]
df["weighted_scores"] = df.mul(weights).sum(axis=1)

print(df)
    s1   s2   s3  weighted_scores
0 0.49 1.00 0.50             0.62
1 0.65 0.87 0.75             0.73
2 0.45 0.85 0.87             0.66
3 0.91 0.53 0.30             0.66
4 0.96 0.44 0.50             0.71
5 0.67 0.87 0.24             0.61
6 0.87 0.41 0.29             0.61
7 0.06 0.15 0.73             0.25
8 0.76 0.92 0.69             0.78
9 0.92 0.28 0.29             0.60
Run Code Online (Sandbox Code Playgroud)