list 分组求和_Table.Group按累计项分组填充案例

本期案例是根据和累计项进行同类项填充,前后转换效果如下图:   4f6a3cf01d878cd48206c4a3b63a2cdb.png 解题步骤   1.这里采用Table.Group第五参数进行分组。拿第二组进行举例,当前x传递的是730,要取得除当前项外的所有数据之和等于730。用List.PositionOf判断730在源“Count”列所在的位置,然后删除该位置之前的数据项获得新list作为List.Range第一参数,再将当前传递的y值在新list中的位置作为List.Range的第三参数,对获得的列进行求和与x进行比对作为分组的依据: 07ce85dcc16bd14a60437d8e7b522430.png
Table.Group(源,"Count",{"a",each _},0,(x,y)=>Number.From([A=源[Count],B=List.Skip(A,List.PositionOf(A,x)+1),C=x=List.Sum(List.Range(B,0,List.PositionOf(B,y)))][C]))
  2.接下来操作就简单了,可以用新增列再重排序列的方式对子表进行转换: b4e0cd207a437e9bd63863c448a73fe5.png
Table.Group(源,"Count",{"a",each Table.ReorderColumns(Table.RenameColumns(Table.AddColumn(Table.Skip(_),"RowLabels A",(x)=>Table.FirstValue(_)),{"Row Labels","RowLabels B"}),{"Row Labels A","Row LabelsB","Count"})},0,(x,y)=>Number.From([A=源[Count],B=List.Skip(A,List.PositionOf(A,x)+1),C=x=List.Sum(List.Range(B,0,List.PositionOf(B,y)))][C]))
  或者用填充的方式: 41c5372882659aed4ae1790a3c4c1ade.png
Table.Group(源,"Count",{"a",each Table.FillDown(Table.FromColumns({{Table.FirstValue(_)}}&Table.ToColumns(Table.Skip(_)),{"RowLabels A","Row Labelse B","Count"}),{"Row LabelsA"})},0,(x,y)=>Number.From([A=源[Count],B=List.Skip(A,List.PositionOf(A,x)+1),C=x=List.Sum(List.Range(B,0,List.PositionOf(B,y)))][C]))
  3.深化合并: f0d9c89c7461931899ea51b8558cc10d.png
Table.Combine(Table.Group(源,"Count",{"a",each Table.FillDown(Table.FromColumns({{Table.FirstValue(_)}}&Table.ToColumns(Table.Skip(_)),{"RowLabels A","Row Labelse B","Count"}),{"Row LabelsA"})},0,(x,y)=>Number.From([A=源[Count],B=List.Skip(A,List.PositionOf(A,x)+1),C=x=List.Sum(List.Range(B,0,List.PositionOf(B,y)))][C]))[a])
  4.List.Accumulate扩展下: 23e4ca8e2e1e6464f2d2f0bcd16344ff.png
Table.Combine(List.Transform(List.Accumulate(Table.ToRows(源),{{},{},0},(x,y)=>if x{2}=0 then {x{0},x{1}&{y},y{1}} else if x{2}-y{1}>0 then{x{0},x{1}&{y},x{2}-y{1}} else {x{0}&{x{1}&{y}},{},0}){0},each Table.FromRows(List.Transform(_,(x)=>{_{0}{0}}&x),{"Row LabelsA","Row Labels B","Count"})))
  以上是本期记录。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值