簡體   English   中英

如何避免加權平均中的NaN?

[英]How to avoid NaN in a weighted average?

這是我的數據框df:

       str1    str2     str3     str4    
key1     3       4       2        5
key2    NaN      3       4        4
key3    NaN     NaN     NaN       2

和向量w:

 [0.2, 0.3, 0.5]

我通常使用df.T.dot(w)計算帶有向量的數據df.T.dot(w)之間的乘積。 但是我想知道如何通過重新加權向量和計算來避免NaN值,只要沒有完整的NaN列。

我的例子:

對於第一列,我希望向量等於v = [0.2+0.3+0.5, 0, 0]並計算[3, NaN, NaN]乘以[1, 0, 0] [3, NaN, NaN] [1, 0, 0]

對於第二列,我希望v = [0.2+0.25, 0.3+0.25, 0]

對於第三列,我希望v = [0.2+0.25, 0.3+0.25, 0]

對於第4列,我希望v保持不變,因為沒有NaN。

預期產量:

          str1   str2  str3    str4
    0      3     3.45   3.1     4.7

如果NaN值在內部乘積中表示“權重= 0”,請在執行計算之前像這樣修改數據框:

df_without_nans = df.fillna(value=0.0)  # 'value' can be dropped
dot_product = df_without_nans.T.dot(w)

我不確定是否有一種簡單的方法來處理nan值。 您可能必須創建自己的點積函數來處理這些值。 這樣的事情可能會起作用:

df.apply(lambda x: (x * [1, 0, 0]).sum())

pandas sum方法會自動忽略nan值,因此您不必自己明確地找到這些值。 您可能會參考其他權重數組來替換[1, 0, 0] 我不確定您現在如何安排將其整合到上述建議中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM