计算以上行的算术平均数

本教程将介绍计算以上行的算术平均数的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

计算以上行的算术平均数 教程 第1张

问题描述

我有一个数据集,如下所示:

ValueType mean
-1.975767  Weather
-0.540979  Fruits
-2.359127  Fruits
-2.815604  Corona
-0.929755  Weather

我要迭代每一行并计算上面每一行的平均值(仅当Type匹配时)。我想将此值放在平均值列中。平均值的计算方式为:

所有值之和/观察次数

此处,观察次数将是到目前为止某个类型发生的次数。

例如,在第一行中,对于天气n=1,上面没有天气"行,因此平均值为-1.975767/1=-1.975767。

在第二行中,其上方没有水果行,因此平均值将仅为-0.540979/1=-0.540979。

然而,在第三行中,当我们扫描前面的所有行时,我们看到水果在此之前已经出现,因此,对于水果,n=2。因此,我们应该得到最后一个水果的价值,并计算一个新的平均值。因此,这里的平均值是-0.540979+(-2.359127)除以2。

ValueType mean
-1.975767  Weather-1.975767
-0.540979  Fruits -0.540979
-2.359127  Fruits (-0.540979 -2.359127)  / 2
-2.815604  Corona -2.815604
-0.929755  Weather(-1.975767 -0.929755) / 2

执行此操作的有效方法是什么?

我看到两种可能的解决方案:

    我们以某种方式存储每种类型的N值,然后只使用上次计算的特定类型的平均值,通过将N加1来更新N,然后计算特定行的新平均值。

    如果存储N值不方便,则每次扫描某个类型的匹配项时,都会检查其相应值并再次计算所有值的平均值。

推荐答案

尝试使用groupby+expanding+mean

df['mean'] = df.groupby('Type')['Value'].expanding().mean().droplevel(0)

输出:

>>> df
Value  Typemean
0 -1.975767  Weather -1.975767
1 -0.540979Fruits -0.540979
2 -2.359127Fruits -1.450053
3 -2.815604Corona -2.815604
4 -0.929755  Weather -1.452761

好了关于计算以上行的算术平均数的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。