组内子组的唯一排名值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了组内子组的唯一排名值相关的知识,希望对你有一定的参考价值。
我试图获得一个独特的排名值(例如我的数据中来自子组的{1, 2, 3, 4}
。SUMPRODUCT将生成ties{1, 1, 3, 4}
,我试图将COUNTIFS添加到最后以调整重复排名。
subgroup
col B col M rank
LMN 01 1
XYZ 02
XYZ 02
ABC 03
ABC 01
XYZ 01
LMN 02 3
ABC 01
LMN 03 4
LMN 03 4 'should be 5
ABC 02
XYZ 02
LMN 01 1 'should be 2
到目前为止,我已经想出了这个。
=SUMPRODUCT(($B$2:$B$38705=B2)*(M2>$M$2:$M$38705))+countifs(B2:B38705=B2,M2:M38705=M2)
我在这做错了什么?
答案
好消息是你可以扔掉SUMPRODUCT function并用一对COUNTIFS functions替换它。 COUNTIFS可以使用完整的列引用而不会产生损害,并且即使SUMPRODUCT单元格范围仅限于数据范围,它也比SUMPRODUCT更有效。
在N2中作为标准函数,
=COUNTIFS(B:B, B2,M:M, "<"&M2)+COUNTIFS(B$2:B2, B2, M$2:M2, M2)
必要时填写。
另一答案
基于OP的解决方案
研究你的帖子要求发布任何替代方案,我对基于你的原始方法通过SUMPRODUCT
函数的解决方案感兴趣。 IMO这可以为艺术展示正确的方法:
应用方法
得到
- a)具有低于或等于当前值的组值的所有当前id 减去
- b)具有相同组值的当前id的数量从当前行开始计数 加
- c)增量为1
公式示例,例如在单元格N5中:
=SUMPRODUCT(($B$2:$B$38705=$B5)*($M$2:$M$38705<=$M5))-COUNTIFS($B5:$B$38705,$B5,$M5:$M$38705,$M5)+1
附:
当然,我同意你更喜欢上面发布的解决方案:+)
以上是关于组内子组的唯一排名值的主要内容,如果未能解决你的问题,请参考以下文章
使用 panda apply() 函数将每个子组的所有值替换为子组最小值(无循环)
如何在 s-s-rS 中创建一个子组,将其他组的特定行的值相加?