【问题标题】:criterium range broadcasting along sum range in `SUMIF`在“SUMIF”中沿总和范围广播的标准范围
【发布时间】:2019-03-06 08:11:54
【问题描述】:

如果两个参数使用不同的范围维度,Google 电子表格能否在其函数中广播行或列,尤其是在 SUMIF 中?

例如,我希望SUMIF(B1:F1, "Offices", B2:F4) 会返回56+23+23,因为1x5 范围B1:F1 将在行维度中重复以匹配3x5 范围B2:F4。 PS:这种重复称为次元广播。不幸的是,这不起作用,SUMIF 只是忽略它没有条件的 2 行并返回 56

     A       B            D        D     E          F
1    Month   Maintenance  Offices  Cars  Employees  Cars 
2    Jan     23           56       43    23         56
3    Feb     12           23       67    43         21
4    March   44           23       45    56         45

问题:我可以在 SUMIF 中指定一个标准,其中列或行保持固定,就像条件格式一样?换句话说,如何在 SUMIF 中指定一个标准,以便广播该标准范围?

为什么 DSUM 不起作用:请注意 SUMIF(B1:F4,"Offices",B1:F4) 可以解决问题,只是它会在此处失败,因为 B1:F4 不是正确的数据库,因为有两个名为 @ 的列987654334@。此外,DSUM 要求列标题与其数据相邻,而我想我想将总和放在标题和数据之间。话虽如此,我还想学习一个强大的概念,而不是DSUM 函数。

条件格式 Google 电子表格确实提供格式广播,例如,如果我在条件 =A$1="Cars" 上格式化范围 A1:F4,那么两个“汽车”列将被格式化,甚至尽管它们是 DF 列。

与 numpy 比较,它做广播 numpy,在 Python 编程时可以用作电子表格库,做一些称为(维度)广播的事情。考虑一个 1 行 3 列的数组(读取电子表格)a 和另一个 3 行 3 列的数组b。然后我们可以要求numpy 将两个元素(读取单元格)相乘,它将重复a 的单行三次以匹配b 的维度:

import numpy

a = numpy.array([
    [0, 1, 2]
])

b = numpy.array([
    [0, 1, 2],
    [3, 4, 5],
    [7, 8, 9],
])

a * b

结果,注意整个第一列都乘以 0,整个第二列乘以 1,整个第三列乘以 2:

numpy.array([
    [0, 1, 4],
    [0, 4, 10],
    [0, 8, 18],
])

【问题讨论】:

  • 我没看到你的问题
  • @player0 问题是是否存在类似REPEATROWS(A1:F1) 这样的语法,它使A1:F1 表现得好像它是n x 6 范围而不是1 x 6 范围,具体取决于行数的第二个论点。这个原则被称为广播,其中一个维度(例如行或列)被重复以匹配不同参数的相同维度,并且是处理(数字)张量(或表)的库的一个非常常见的特征。
  • 有一种方法可以在不允许具有不同大小的情况下处理两个不同大小的数组,使用 REPT 只是为了匹配更大的数组,这样它就会传入需要相同大小数组的公式(例如过滤器) - stackoverflow.com/a/54795616/5632629

标签: google-sheets


【解决方案1】:
=SUMPRODUCT(QUERY(TRANSPOSE(A1:F10), "where Col1 = 'Offices'"))

【讨论】:

  • 谢谢,这是一个不错的解决方案,但它没有提供以通用方式使用广播的语法,而这正是我正在寻找的。 Google 电子表格可能不支持广播,甚至违反电子表格方法,但我会稍等片刻再接受,同时希望它得到支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 2023-04-01
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
相关资源
最近更新 更多