【问题标题】:How do you give weights to dataframe columns iteratively for weighted mean average?您如何为加权平均平均值迭代地赋予数据框列权重?
【发布时间】:2021-09-07 20:12:57
【问题描述】:

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

假设我们有以下列:s1、s2、s3 我想分别给他们权重:w1、w2、w3

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

无效的代码:

score_df["weighted_avg"] += weight * score_df[feature]

适用于列表但不适用于列表的手动代码:

df["weighted_scores"] = 0.5*df["s1"] + 0.25*df["s2"] + 0.25*df["s3"]

【问题讨论】:

    标签: python pandas dataframe weighted-average


    【解决方案1】:

    我们可以为此使用 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
    
    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
    

    【讨论】:

    • 这正是我想要的。不敢相信有这样的方法,非常感谢!
    【解决方案2】:

    您可以使用dot

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame(np.random.rand(10,3), columns=["s1", "s2", "s3"])
    
    df['weighted_scores'] = df.dot([.5,.25,.25])
    df
    

    出来

             s1        s2        s3  weighted_scores
    0  0.053543  0.659316  0.033540         0.199985
    1  0.631627  0.257241  0.494959         0.503863
    2  0.220939  0.870247  0.875165         0.546822
    3  0.890487  0.519320  0.944459         0.811188
    4  0.029416  0.016780  0.987503         0.265779
    5  0.843882  0.784933  0.677096         0.787448
    6  0.396092  0.297580  0.965454         0.513805
    7  0.109894  0.011217  0.443796         0.168700
    8  0.202096  0.637105  0.959876         0.500293
    9  0.847020  0.949703  0.668615         0.828090
    

    【讨论】:

    • 对向量的点函数。不知道这里也可以用,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2010-09-21
    • 2021-09-03
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多