簡體   English   中英

跨行計算數據幀加權和的最快方法

[英]Fastest way to compute weighted sum of dataframe across rows

我有一個包含一些列的數據框。 我想對一列應用一些轉換,並將其用作計算其他列的加權和的權重。 問題是我現在做的方式太長了。 有沒有更快的方法來做到這一點?

我目前正在計算一個新列,轉置,並按照幾乎所有答案的建議使用df.dot 問題是我有一個非常大的數據框,所以這種方法需要很長時間。

例如,給定以下 df

col1  col2  col3
 0.1   0.2   0.3
 1.4   1.5   1.6
 1.9   1.8   1.7

我創建了一個新列,權重,即1/col3

col1  col2  col3  weight
 0.1   0.2   0.3   3.333
 1.4   1.5   1.6   0.625
 1.9   1.8   1.7   0.588

然后我對重量進行轉置和df.dot以獲得

col1  col2
2.32  2.66

我檢查了鏈接的答案,沒有使用np.dot ,而是DataFrame.dot ,我希望這應該更快,但是如果使用沒有巨大 RAM 的大型 DataFrames,它應該仍然很慢:

w = 1 / df.col3
arr = np.dot(df.to_numpy().T, w.to_numpy())

df1 = pd.DataFrame([arr], columns=df.columns)
print (df1)
      col1     col2  col3
0  2.32598  2.66299   3.0

暫無
暫無

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

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