将非分组列的数据移到同一行
例题描述和简单分析
有 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
英文版