我是 Python 的初學者,我了解 np.average 一般是如何作業的,但我不知道如何讓它為我的特定應用程式作業。我希望根據不同的權重為 df 的一行創建不同的加權平均值。
下面的例子:
df=pd.DataFrame({'vals':[50,99,12,33],
'weight1':np.random.randint(0,50,4),
'weight2':np.random.randint(0,50,4),
'weight3':np.random.randint(0,50,4)})
vals weight1 weight2 weight3
0 50 39 11 9
1 99 37 17 27
2 12 22 29 0
3 33 39 17 47
我希望創建一個列(在單獨的資料框中),該列具有我正在使用的每組權重的“vals”加權平均值。
所以輸出看起來像這樣:
weights weightedvals
0 weight1 52.29
1 weight2 42.45
2 weight3 56.31
我了解如何單獨獲得這些加權平均值
average(df['vals'], weights = df['weight1'])
但是我對如何針對多個權重值執行此操作感到困惑。我嘗試了一些解決方案,但它們更多的是為多列使用相同的權重。
謝謝!!
uj5u.com熱心網友回復:
您可能正在尋找一個生成器物件,如下所示:
[np.average(df['vals'], weights=df[w]) for w in df.columns[1:]]
將生成一個元素串列,其中第一個元素對應于使用'weight1'第二個 to的平均值'weight2',依此類推。您可以將其視為壓縮的 for 回圈,盡管它比使用 for 回圈并將值附加到串列要快得多。df.columns只是列名df.columns[1:]串列,省略第一個元素的列名串列也是如此。
所以為了得到你正在尋找的輸出
avg = [np.average(df['vals'], weights=df[w]) for w in df.columns[1:]]
avg_df = pd.DataFrame({'weights' : df.columns[1:], 'weightedvals' : avg})
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/317007.html
