当前位置:科学 > 正文

热点评!List.Accumulate 批量替换案例

2023-03-25 13:54:33  来源:可乐之滨

本期案例案例要求是把空值和大于6的数据,都替换成前一列对应行的数据,前后转换效果如下:

解题套路

1.Table.ToList


(相关资料图)

解题思路:结合ACC函数对行的每一项数据进行循环转换。

Table.FromRows(Table.ToList(源,each List.Accumulate(_,{{},""},(x,y)=>if y=null or y>=6 then {x{0}&{x{1}},x{1}} else {x{0}&{y},y}){0}),Table.ColumnNames(源))

这个题其实隐含了一个条件,就是第一列肯定是满足要求的,不然后续就无法进行传递操作。

2.Table.ReplaceValue

解题思路:这里搭配ACC使用应该是最优的组合方式,针对Table.ReplaceValue的第二参数的获得,这里有个取巧的成分。

针对第二列,字段名中包含数字2,而它需要取值当前行的索引位置是0,因此这里可以使用2-2获得。当然,这里也可以使用位置函数进行判断,或者让字段与序列组合使用。

List.Accumulate(Table.ColumnNames(源),源,(s,c)=>Table.ReplaceValue(s,each Record.ToList(_){Number.From(Text.Select(c,{"0".."9"}))-2},0,(x,y,z)=>if x=null or x>=6 then y else x,{c}))

使用List.PositionOf函数:

List.Accumulate(Table.ColumnNames(源),源,(s,c)=>Table.ReplaceValue(s,each Record.ToList(_){List.PositionOf(Table.ColumnNames(源),c)-1},0,(x,y,z)=>if x=null or x>=6 then y else x,{c}))

这里不需要考虑第一列对应字段获取的错误值,因为Table.ReplaceValue有个容错机制,对应错误值会自动判断没有进行替换。

以上是本期内容。

关键词:

推荐阅读

pvc是什么 生产pvc的上市公司都有哪些?

pvc是什么pvc中文名是聚氯乙烯,曾是世界上产量最大的通用塑料,在建筑材料、日用品、管材等领域应用,市场十分广泛。那么,A股市场中生产p 【详细】

搜狗正式并入腾讯 搜狗公司简介

搜狗正式并入腾讯前段时间,一直有消息传出,腾讯即将收购搜狗,近日,搜狗正式并入腾讯的消息冲上了热搜榜单,吸引了众多网友关注,具体是 【详细】

中国古代十大名刀是什么 中国古代十大名刀简介

中国几乎所有的朝代都有记载名刀诞生的记录。从初唐大一统战争到盛唐的一切内外战争都出现过冷兵器——唐刀,史上对后世影响很大。中国古代 【详细】

动力天文台最新拍摄到一个超级日冕洞 ​日冕出现在哪里?

动力天文台最新拍摄到一个超级日冕洞据国外媒体报道,天文学家观测到的日冕洞犹如太阳表面蔓延一个巨大的深坑,10月15日,美国宇航局太阳动 【详细】

鲁班发明了什么东西 什么是鲁班发明的?

鲁班发明了什么东西?在鲁班之前,木匠只用斧子和刀子来平整他们建筑用的木材,即使干的很好,也难让人满意。后来通过长期实践,鲁班发现使 【详细】

关于我们  |  联系方式  |  免责条款  |  招聘信息  |  广告服务  |  帮助中心

联系我们:85 572 98@qq.com备案号:粤ICP备18023326号-40

科技资讯网 版权所有