[英]Pandas groupby and weighted sum for multiple columns
我已經看到十幾個 Pandas groupby 多列問題,但我不知道如何在合理的時間內運行它。 我的目標是對幾列進行np.dot
,並根據我的權np.dot
每個剩余的列中應用np.dot
生成的子集:
# Example data:
weights = np.array([.20, .60, .20])
data = pd.DataFrame([[0, "TX", 10, 55], [0, "TX", 5, 30], [0, "TX", 2, 75], [1, "TX", 4, 30], [1, "TX", 8, 100], [1, "TX", 2, 30]], columns=["sim", "state", "x1", "x2"])
print(data)
sim state x1 x2
0 0 TX 10 55
1 0 TX 5 30
2 0 TX 2 75
3 1 TX 4 30
4 1 TX 8 100
5 1 TX 2 30
我無法讓np.dot
開箱即用,所以我不得不將乘法和求和分解為單獨的步驟。 這是我嘗試過的,但在我的幾百萬行數據集上,這需要大約 2 分鍾,更不用說非常不可讀了:
results = data.groupby(["sim", "state"]).apply(lambda sdf: (sdf[["x1", "x2"]] * weights.reshape((3,1))).sum())
print(results.reset_index())
sim state x1 x2
0 0 TX 5.4 44.0
1 1 TX 6.0 72.0
怎么樣...
(df.set_index(['sim', 'state'])
.mul(np.tile(weights, len(df) // len(weights)), axis=0)
.sum(level=[0, 1]))
x1 x2
sim state
0 TX 5.4 44.0
1 TX 6.0 72.0
這是如何運作的,
df
的主鍵)mul
與權重執行廣播乘法 這是在len(df) % len(weights) == 0
的假設下工作的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.