如何用单个公式在Google Sheets中计算移动平均值?
在Google Sheets中用单个公式计算累积移动平均值
针对动态生成/追加数据的A列(Data列),要生成B列(Average_so_far)的累积移动平均值(即每一行的值是从第一行到当前行所有数据的平均值),可以用以下两种单个公式实现:
方案1:用SCAN函数(简洁高效,推荐)
SCAN函数支持累积计算,是处理这类需求的最优解。在B1单元格输入公式:
=ARRAYFORMULA(IF(A:A="", "", SCAN(0, A:A, LAMBDA(acc, val, acc+val))/SCAN(0, A:A, LAMBDA(acc, val, IF(val="", acc, acc+1)))))
原理说明:
- 第一个
SCAN函数计算从第一行到当前行的累积求和 - 第二个
SCAN函数统计从第一行到当前行的非空数据累积数量 - 两者相除得到对应行的累积平均值,
IF(A:A="", "", ...)用于跳过A列的空行,避免显示错误值
方案2:用SUMIF+COUNTIF(兼容旧版)
如果你的Google Sheets版本不支持SCAN函数,可使用SUMIF和COUNTIF的组合:
=ARRAYFORMULA(IF(A:A="", "", SUMIF(ROW(A:A), "<="&ROW(A:A), A:A)/COUNTIF(ROW(A:A), "<="&ROW(A:A), A:A)))
原理说明:
SUMIF(ROW(A:A), "<="&ROW(A:A), A:A)计算当前行及以上所有A列数据的总和COUNTIF(ROW(A:A), "<="&ROW(A:A), A:A)统计当前行及以上的非空数据个数- 除法得到累积平均值,同样通过IF语句过滤空行
两种公式都只需在B1单元格输入一次,就能自动填充整列;当A列追加新数据时,B列会自动更新对应的平均值,完全适配动态数据场景。
内容的提问来源于stack exchange,提问作者Argyll
相关产品推荐
相关产品推荐

