[英]Calculate a weighted average on a dataframe without using a loop in python
假設我有以下 dataframe:
Individual stop x y z time
0 23 1 20 27 4 21
1 23 2 23 24 13 63
2 1756 2 5 41 73 12
3 1756 3 7 42 72 6
4 1756 4 4.5 39 72 45
5 1756 4 3 50 73 98
6 2153 2 121 12 6 33
7 2153 3 122.5 2 6 0
8 3276 1 54 33 -12 0
9 5609 1 -2 44 -32 56
10 5609 2 8 44 -32 23
11 5609 5 102 -23 16 76
我想計算每個人的時間加權 position x、y、z 的平均值。 然后我想將結果放入一個新的 dataframe 中,如下所示:
Individual bar_x bar_y bar_z
0 23 22.5 24.75 10.75
2 1756 3.72 45.96 72.68
6 2153 121 12 6
9 5609 50.48 11.15 24.16
我通過循環遍歷每個個體並計算加權平均值來完成此操作。 它運行良好,但是當 dataframe 變大時,運行時間很長。 我很確定使用 pandas 有一個更快的解決方案,但我還沒有找到方法,請問有什么想法嗎?
提前致謝!
這是你想要的?
(df[['x','y','z']].mul(df.groupby('Individual')['time']
.transform(lambda x: x.div(x.sum())).fillna(0),axis=0)
.groupby(df['Individual'])
.sum()
.round(2))
Output:
x y z
Individual
23 22.25 24.75 10.75
1756 3.72 45.96 72.68
2153 121.00 12.00 6.00
3276 0.00 0.00 0.00
5609 50.48 11.15 -8.46
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.