从满足条件的范围中删除多行
Remove Multiple Rows from Range Satisfying Conditions
我对在 excel 中做 'advanced' 的事情还很陌生,所以我无法自己解决这个问题。我正在使用以下 Google 表格电子表格:
基本上我要实现的元素计数算法如下:
- 对于每个元素组(I、II、III、IV)找到最高的元素值。
- 将这些元素值相加。
- 设 M 为找到的唯一元素组的总数。
- 在所有其他剩余元素值中,从每个单独的组中删除 M 个最高值,对遇到的 7-M 个最高值求和,忽略元素组。
这应该适用于任何 M=1、2、3、4,7 可以替换为 5 到 10 之间的任何数字。
在这种情况下,每个单独组的最高元素是:
I: 0.3 -- II: 0.1 -- III: 0.3 -- IV: 0.2
然后我们查看这些值以外的最高值,直到我们总共有 7 个值,也就是说,从列表中删除这些值,我们查看剩余的 3 个最高值。这些是 0.3 两次和 0.2 一次。总和变成1.7.
我已经尝试这样做,只考虑元素组 IV,同时假设它只出现一次。我不确定它在这种情况下是否完全有效,但除此之外,我还试图扩展它以使其适用于考虑所有元素组的算法。我用的是
=IFERROR(QUERY({ROW(B2:D11),B2:D11},"select Col1 where Col2='IV' limit 1",0),0) + sum(sortn(FILTER(D2:D11, ROW(D2:D11)<>ArrayFormula(IFERROR(QUERY({ROW(B2:D11),B2:D11},"select Col1 where Col2='IV' limit 1",0),0))), 6, 0, 1, false))
我的想法是,我添加 IV 的值(如果它存在),然后对删除了 IV 条目值的排序列表的前 6 个求和。
有谁知道如何同时删除多行,或者有什么其他方法可以使该算法起作用吗?我在 SQL 或类似的事情上没有太多经验,但我确信我可以使用数据帧或列表使这个算法在 Python 中工作。
编辑:我确实认为 of/tried 递归使用 FILTER(FILTER...)) 等 4 次从特定元素组中过滤掉 1 个值,计算找到这样一个元素的次数,并创建了一个长度为 7-M 的排序列表以再次对它求和,但我没有让它工作,我不确定这是否是要走的路。
For each element group (I, II, III, IV) find the highest element value.
=SORTN(SORT({A2:A, C2:C}, 2, 0), 9^9, 2, 1, 1)
Sum these element values up.
=SUM(SORTN(SORT({A2:A, C2:C}, 2, 0), 9^9, 2, 1, 1))
Let M be the total number of unique element groups found
=COUNTUNIQUE(A2:A)
更新:
=SUM(SORTN(FILTER(C2:C, NOT(REGEXMATCH(A2:A&" "&C2:C&" "&
COUNTIFS(A2:A&C2:C, A2:A&C2:C, ROW(A2:A), "<="&ROW(A2:A)), TEXTJOIN("|", 1,
QUERY(TRANSPOSE(SORTN(SORT({A2:A, C2:C}, 2, 0), 9^9, 2, 1, 1)),,
9^9)&" 1")))), 7-COUNTUNIQUE(A2:A), 0, 1, 0))+
SUM(SORTN(SORT({A2:A, C2:C}, 2, 0), 9^9, 2, 1, 1))
我对在 excel 中做 'advanced' 的事情还很陌生,所以我无法自己解决这个问题。我正在使用以下 Google 表格电子表格:
基本上我要实现的元素计数算法如下:
- 对于每个元素组(I、II、III、IV)找到最高的元素值。
- 将这些元素值相加。
- 设 M 为找到的唯一元素组的总数。
- 在所有其他剩余元素值中,从每个单独的组中删除 M 个最高值,对遇到的 7-M 个最高值求和,忽略元素组。
这应该适用于任何 M=1、2、3、4,7 可以替换为 5 到 10 之间的任何数字。
在这种情况下,每个单独组的最高元素是:
I: 0.3 -- II: 0.1 -- III: 0.3 -- IV: 0.2
然后我们查看这些值以外的最高值,直到我们总共有 7 个值,也就是说,从列表中删除这些值,我们查看剩余的 3 个最高值。这些是 0.3 两次和 0.2 一次。总和变成1.7.
我已经尝试这样做,只考虑元素组 IV,同时假设它只出现一次。我不确定它在这种情况下是否完全有效,但除此之外,我还试图扩展它以使其适用于考虑所有元素组的算法。我用的是
=IFERROR(QUERY({ROW(B2:D11),B2:D11},"select Col1 where Col2='IV' limit 1",0),0) + sum(sortn(FILTER(D2:D11, ROW(D2:D11)<>ArrayFormula(IFERROR(QUERY({ROW(B2:D11),B2:D11},"select Col1 where Col2='IV' limit 1",0),0))), 6, 0, 1, false))
我的想法是,我添加 IV 的值(如果它存在),然后对删除了 IV 条目值的排序列表的前 6 个求和。
有谁知道如何同时删除多行,或者有什么其他方法可以使该算法起作用吗?我在 SQL 或类似的事情上没有太多经验,但我确信我可以使用数据帧或列表使这个算法在 Python 中工作。
编辑:我确实认为 of/tried 递归使用 FILTER(FILTER...)) 等 4 次从特定元素组中过滤掉 1 个值,计算找到这样一个元素的次数,并创建了一个长度为 7-M 的排序列表以再次对它求和,但我没有让它工作,我不确定这是否是要走的路。
For each element group (I, II, III, IV) find the highest element value.
=SORTN(SORT({A2:A, C2:C}, 2, 0), 9^9, 2, 1, 1)
Sum these element values up.
=SUM(SORTN(SORT({A2:A, C2:C}, 2, 0), 9^9, 2, 1, 1))
Let M be the total number of unique element groups found
=COUNTUNIQUE(A2:A)
更新:
=SUM(SORTN(FILTER(C2:C, NOT(REGEXMATCH(A2:A&" "&C2:C&" "&
COUNTIFS(A2:A&C2:C, A2:A&C2:C, ROW(A2:A), "<="&ROW(A2:A)), TEXTJOIN("|", 1,
QUERY(TRANSPOSE(SORTN(SORT({A2:A, C2:C}, 2, 0), 9^9, 2, 1, 1)),,
9^9)&" 1")))), 7-COUNTUNIQUE(A2:A), 0, 1, 0))+
SUM(SORTN(SORT({A2:A, C2:C}, 2, 0), 9^9, 2, 1, 1))