[英]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.