将非分组列的数据移到同一行

例题描述和简单分析

有 Excel 文件 Book1.xlsx,数据如下所示:

Account Name

Join Date

Other Columns

Package

Account 1

2001/1/19

Data

Main Package

Account 1

2001/1/19

Data

Bolt On

Account 1

2001/1/19

Data

Add on

Account 2

2001/1/18

Data

Main Package

Account 3

2001/1/17

Data

Main Package

Account 3

2001/1/17

Data

Add on

Account 4

2001/1/19

Data

Main Package

需要按 ID 分组汇总其余列,结果如下:

Account Name

Join Date

Other Columns

Package

Extra Item

Extra Item

Account 1

2001-01-19

Data

Main Package

Bolt On

Add on

Account 2

2001-01-18

Data

Main Package



Account 3

2001-01-17

Data

Main Package

Add on


Account 4

2001-01-19

Data

Main Package



解法及简要说明

在集算器中编写脚本 p1.dfx,如下所示:


A

1

=file("Book1.xlsx").xlsimport@w()

2

=A1.m(2:).group(~(1)).(if(~.len()>1,~=~.m(1)|~.m(2:).(~(4)),~=~.m(1)))

3

=A1.m(1).pad("Extra   Item",A2.max(~.len()))

4

=file("result.xlsx").xlsexport@w([A3]|A2)

简要说明:

A1   读取 Book1.xlsx 数据,返回成序列的序列

A2  取第二行开始的数据部分,按第一列(Account Name)分组,若组内数据行数大于 1,则把从第二行还是的第四列(Package)依次拼接到第一行数据的尾部,否则取组内的第一条数据

A3  用串 "Extra Item" 将 A1 的第一行(表头)补足到和数据部分的最大列数一样长

A4  表头与数据合并后的结果导出至 result.xlsx

问答搜集

https://stackoverflow.com/questions/63641240/move-duplicate-rows-unique-value-to-new-column