Split and align the data as shown.
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 681
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Split And Align Columns with Power Query
Power Query solution 1 for Split And Align Columns, proposed by Kris Jaganah:
let
A = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content][Data],
B = Table.Combine(
List.Transform(
A,
(v) =>
[
a = Text.Split(v, ", "),
b = List.Positions(a),
c = Table.FromRows(
List.Split(
List.TransformMany(b, each b, (x, y) => if x = y then a{y} else null),
List.Count(a)
)
)
][c]
)
)
in
B
Power Query solution 2 for Split And Align Columns, proposed by Seokho MOON:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
AddCol = Table.AddColumn(Source, "Tbl", each Table.FromColumns(Fun([Data]))),
Fun = (x) =>
[
A = Text.PositionOf(x, ", ", 2),
B = {List.Repeat({null}, List.Count(A)) & {Text.Range(x, List.Last(A) + 2)}},
C = if A = {} then {{x}} else @Fun(Text.Start(x, List.Last(A))) & B
][C],
Res = Table.Combine(AddCol[Tbl])
in
Res
Power Query solution 3 for Split And Align Columns, proposed by Meganathan Elumalai:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Result = Table.Combine(
List.Transform(
Source[Data],
(f) =>
[
l = Text.Split(f, ", "),
fin = Table.FromRows(
List.Transform(
List.Positions(l),
(x) => List.Repeat({null}, x) & {l{x}} & List.Repeat({null}, List.Count(l) - x - 1)
)
)
][fin]
)
)
in
Result
Power Query solution 4 for Split And Align Columns, proposed by Antriksh Sharma:
let
Source = Table,
Split = List.Transform(
Source[Data],
each
let
a = Text.Split(_, ","),
b = List.Positions(a),
c = List.Zip({a, b})
in
c
),
Result = List.Transform(
{0 .. List.Count(Split) - 1},
(x) =>
List.Accumulate(
Split{x},
Table.FromColumns({{0 .. List.Count(Split{x}) - 1}}, type table [n = number]),
(s, c) => Table.AddColumn(s, Text.From(c{1}), each if [n] = c{1} then c{0} else null)
)
),
Combine = Table.PrefixColumns(Table.RemoveColumns(Table.Combine(Result), "n"), "Column")
in
Combine
Power Query solution 5 for Split And Align Columns, proposed by Peter Krkos:
PowerQuerz solution:
= Table.Combine(Table.AddColumn(Source, "L", each
[ a = Text.Split([Data], ", "),
b = Table.Combine(List.Transform(List.Zip({List.Transform(List.Positions(a), (x)=> List.Repeat({null}, x)), List.Split(a, 1)}), (y)=>
[ b1 = List.Combine(y),
b2 = Table.FromRecords({Record.Combine(List.Transform(List.Positions(b1), (z)=> Record.AddField([], "Column" & Text.From(z+1), b1{z})))})
][b2]))
][b])[L])
Power Query solution 6 for Split And Align Columns, proposed by Peter Krkos:
v2:
= Table.Combine(List.TransformMany(List.Transform(Source[Data], each Text.Split(_, ", ")),
each List.Transform(_, (x)=> List.Repeat({null}, List.PositionOf(_, x)) & {x}),
(x,y)=> Table.FromRows({y})))
Power Query solution 7 for Split And Align Columns, proposed by Melissa de Korte:
let
S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
A = Table.Combine(
Table.TransformRows(
S,
each Table.FromColumns(
[
t = Text.Split([Data], ","),
i = List.Positions(t),
a = List.Transform(i, (x) => List.Repeat({null}, x) & {t{x}})
][a]
)
)
)
in
A
Solving the challenge of Split And Align Columns with Excel
Excel solution 1 for Split And Align Columns, proposed by Rick Rothstein:
=DROP(
REDUCE(
0,
A2:A5,
LAMBDA(
a,
x,
LET(
t,
TEXTSPLIT(
x,
,
", "
),
IFNA(
VSTACK(
a,
LEFT(
t,
MUNIT(
ROWS(
t
)
)
)
),
""
)
)
)
),
1
)
Excel solution 2 for Split And Align Columns, proposed by John V.:
=DROP(
REDUCE(
0,
A2:A5,
LAMBDA(
a,
v,
LET(
i,
TEXTSPLIT(
v,
", "
),
IFNA(
VSTACK(
a,
IFS(
i=TOCOL(
i
),
i
)
),
""
)
)
)
),
1
)
Excel solution 3 for Split And Align Columns, proposed by 🇰🇷 Taeyong Shin:
=LET(n,SEQUENCE(,9),r,REGEXREPLACE(A2:A5,REPT("(?:, )?(.)?",MAX(n)),"$"&n),F,LAMBDA(x,TOCOL(IFS(r>"",x),2)),s,F(n),DROP(PIVOTBY(SEQUENCE(ROWS(s)),s,F(r),CONCAT,,0,,0),1,1))
Excel solution 4 for Split And Align Columns, proposed by Kris Jaganah:
=DROP(
REDUCE(
"",
A2:A5,
LAMBDA(
x,
y,
IFNA(
VSTACK(
x,
LET(
a,
TEXTSPLIT(
y,
,
", "
),
IF(
MUNIT(
ROWS(
a
)
),
a,
""
)
)
),
""
)
)
),
1
)
Excel solution 5 for Split And Align Columns, proposed by Julian Poeltl:
=IFNA(DROP(REDUCE(0,
A2:A5,
LAMBDA(A,
B,
VSTACK(A,
LET(L,
(LEN(
B
)-LEN(
SUBSTITUTE(
B,
", ",
""
)
))/2+1,
MAKEARRAY(L,
L,
LAMBDA(C,
D,
IF(C=D,
MID(B,
(C-1)*3+1,
1),
""))))))),
1),
"")
Excel solution 6 for Split And Align Columns, proposed by Timothée BLIOT:
=IFNA(DROP(REDUCE(0,A2:A5,LAMBDA(w,v,LET(A,TEXTSPLIT(v,,", "),VSTACK(w,IF(MUNIT(ROWS(A)),A,""))))),1),"")
Excel solution 7 for Split And Align Columns, proposed by Duy Tùng:
=DROP(REDUCE(0,A2:A5,LAMBDA(x,v,LET(a,TEXTSPLIT(v,,", "),IFNA(VSTACK(x,IFS(MUNIT(ROWS(a)),a)),"")))),1)
=LET(S,SEQUENCE,a,TEXTSPLIT(TEXTJOIN("/",,A2:A5),", ","/"),b,TOCOL(IF(a>0,S(,COLUMNS(a))),3),REPT(TOCOL(a,3),b=S(,MAX(b))))
=LET(S,SEQUENCE,b,TEXTSPLIT(TEXTJOIN("/",,A2:A5),", ","/"),c,TOCOL(IF(b>0,S(,COLUMNS(b))),3),DROP(PIVOTBY(S(ROWS(c)),c,TOCOL(b,3),SINGLE,,0,,0),1,1))
Excel solution 8 for Split And Align Columns, proposed by Sunny Baggu:
=IFNA(
DROP(
REDUCE(
"💗 all",
A2:A5,
LAMBDA(x, y,
VSTACK(
x,
LET(
_a, TEXTSPLIT(y, , ", "),
_b, SEQUENCE(ROWS(_a)) - 1,
IFNA(
DROP(
REDUCE(
"",
REPT(",", _b) & _a,
LAMBDA(a, v, VSTACK(a, TEXTSPLIT(v, ",")))
),
1
),
""
)
)
)
)
),
1
),
""
)
Excel solution 9 for Split And Align Columns, proposed by LEONARD OCHEA 🇷🇴:
=DROP(IFNA(REDUCE(0,A2:A5,LAMBDA(a,x,LET(h,TEXTSPLIT(x,", "),VSTACK(a,IFS(h=TOCOL(h),h))))),""),1)
With PIVOT
=LET(d,A2:A5,w,TEXTSPLIT(CONCAT(d&", "),,", ",1),DROP(PIVOTBY(SEQUENCE(ROWS(w)),MAP(w,LAMBDA(x,(2+CONCAT(IFERROR(FIND(x,d),"")))/3)),w,SINGLE,,0,,0),1,1))
Excel solution 10 for Split And Align Columns, proposed by Anshu Bantra:
= to_df(REF("A1:A5"))
data['Data'] = data['Data'].str.replace(',', '')
data['Len'] = [len(row[0]) for row in data.values]
grid = np.zeros( ( sum(data['Len']), max(data['Len']) ) , dtype=str)
agg_row = 0
for row, row_data in enumerate(data['Data']):
for col, col_data in enumerate(row_data)
Excel solution 11 for Split And Align Columns, proposed by Md. Zohurul Islam:
=IFNA(DROP(REDUCE("",A2:A5,LAMBDA(x,y,LET(
a,TEXTSPLIT(y,,", "),
r,SEQUENCE(ROWS(a)),c,SEQUENCE(,ROWS(a)),
d,IF((r+c)=2*r,a,""),
VSTACK(x,d)))),1),"")
Excel solution 12 for Split And Align Columns, proposed by Pieter de B.:
=DROP(REDUCE("",A2:A5,LAMBDA(a,b,LET(c,TEXTSPLIT(b,,", "),IFNA(VSTACK(a,IF(MUNIT(ROWS(c)),c,"")),"")))),1)
Excel solution 13 for Split And Align Columns, proposed by Hamidi Hamid:
=DROP(IFNA(REDUCE(0,SUBSTITUTE(A2:A5,", ",),LAMBDA(a,b,VSTACK(a,LET(x,MID(b,SEQUENCE(LEN(b)),1),s,SEQUENCE(LEN(b)),d,SEQUENCE(,LEN(b)),IF(s=d,x,""))))),""),1)
Excel solution 14 for Split And Align Columns, proposed by Asheesh Pahwa:
=IFNA(
DROP(
REDUCE(
"",
A2:A5,
LAMBDA(
x,
y,
VSTACK(
x,
LET(
t,
TEXTSPLIT(
y,
,
", "
),
s,
ROWS(
t
),
m,
MUNIT(
s
),
IF(
m,
t,
""
)
)
)
)
),
1
),
""
)
Excel solution 15 for Split And Align Columns, proposed by Eric Laforce:
=LET(v; $A$2:$A$5; r; REDUCE(""; v; LAMBDA(s;c; LET(a; TEXTSPLIT(c; ; ", "); rs; VSTACK(IF(MUNIT(ROWS(a)); a; "")); IFNA(VSTACK(s; rs); "")))); DROP(r; 1))
Excel solution 16 for Split And Align Columns, proposed by ferhat CK:
=IFNA(DROP(REDUCE(0,A2:A5,LAMBDA(a,v,VSTACK(a,LET(n,TEXTSPLIT(v,,", "),i,ROWS(n),MAKEARRAY(i,i,LAMBDA(x,y,IF(x=y,INDEX(n,x),""))))))),1),"")
Excel solution 17 for Split And Align Columns, proposed by Jaroslaw Kujawa:
=IFNA(
DROP(
REDUCE(
"";
A2:A5;
LAMBDA(
a;
x;
LET(
y;
SUBSTITUTE(
x;
", ";
""
);
VSTACK(
a;
MAKEARRAY(
LEN(
y
);
LEN(
y
);
LAMBDA(
r;
c;
IF(
r=c;
MID(
y;
r;
1
);
""
)
)
)
)
)
)
);
1
);
""
)
=IFNA(
DROP(
REDUCE(
"";
A2:A5;
LAMBDA(
a;
x;
LET(
y;
TEXTSPLIT(
x;
;
", "
);
VSTACK(
a;
MAKEARRAY(
ROWS(
y
);
ROWS(
y
);
LAMBDA(
r;
c;
IF(
r=c;
CHOOSEROWS(
y;
r
);
""
)
)
)
)
)
)
);
1
);
""
)
Excel solution 18 for Split And Align Columns, proposed by Meganathan Elumalai:
=IFNA(
DROP(
REDUCE(
"",
A2:A5,
LAMBDA(
a,
v,
VSTACK(
a,
LET(
x,
TEXTSPLIT(
v,
,
& ", "
),
s,
ROWS(
x
),
IF(
MUNIT(
s
),
x,
""
)
)
)
)
),
1
),
""
)
Excel solution 19 for Split And Align Columns, proposed by Eddy Wijaya:
=DROP(IFNA(REDUCE(0,A2:A5,LAMBDA(a,v,VSTACK(a,LET(
sp,TRIM(TEXTSPLIT(v,,",")),
a,COUNTA(sp),
MAKEARRAY(a,a,LAMBDA(r,c,IF(r=c,INDEX(sp,c),""))))))),""),1)
Excel solution 20 for Split And Align Columns, proposed by Mihai Radu O:
=IFNA(DROP(REDUCE("",A2:A5,
LAMBDA(x,y,
LET(a,TEXTSPLIT(y,,", "),b,ROWS(a), c,MAKEARRAY(b,b,LAMBDA(r,c,IF(r=c,INDEX(a,r,),""))),
VSTACK(x,c)))),1),"")
Excel solution 21 for Split And Align Columns, proposed by Edwin Tisnado:
=DROP(IFERROR(REDUCE(0,A2:A5,LAMBDA(x,y,LET(t,TEXTSPLIT(y,,", "),VSTACK(x,IF(MUNIT(ROWS(t)),t,j))))),""),1)
Excel solution 22 for Split And Align Columns, proposed by Fredson Alves Pinho:
=DROP(TEXTSPLIT(REDUCE("",
A2:A5,
LAMBDA(a,
x,
a&ARRAYTOTEXT(REPT(",",
SEQUENCE(,
(LEN(
x
)+2)/3,
0))&TEXTSPLIT(
x,
", "
))&";")),
",",
";",
,
,
""),
-1)
Excel solution 23 for Split And Align Columns, proposed by Ernesto Vega Castillo:
=DROP(REDUCE(0,A2:A5,LAMBDA(x,y,LET(a,TEXTSPLIT(y,","),b,IFNA(VSTACK(x,IF(MUNIT(COUNTA(a)),a)),""),IF(b=FALSE,"",b)))),1)
Excel solution 24 for Split And Align Columns, proposed by CA Mohit Saxena:
=DROP(REDUCE(
"",
A3:A5,
LAMBDA(
x,
y,
IFNA(
VSTACK(
x,
LET(
t,
TEXTSPLIT(
y,
", "
),
IF(
MUNIT(
COLUMNS(
t
),
t,
""
)
)
),
""
)
)
),
1
)
Solving the challenge of Split And Align Columns with Python
Python solution 1 for Split And Align Columns, proposed by Konrad Gryczan, PhD:
import pandas as pd
path = "681 Split and Align.xlsx"
input = pd.read_excel(path, usecols="A", nrows=4)
test = pd.read_excel(path, usecols="C:G", nrows=11, names=["1", "2", "3", "4", "5"])
input["RowNumber"] = input.index + 1
input = input.assign(**{"Split": input["Data"].str.split(", ")}).explode("Split")
input["row"] = range(1, len(input) + 1)
input["col"] = input.groupby("RowNumber").cumcount() + 1
input = input.pivot(index="row", columns="col", values="Split").reset_index(drop=True)
input.columns.name = None
input.columns = test.columns
print(test.equals(input)) # True
Solving the challenge of Split And Align Columns with Python in Excel
Python in Excel solution 1 for Split And Align Columns, proposed by Alejandro Campos:
data = xl("A1:A5", headers=True)["Data"]
aligned_df = pd.DataFrame([[*['']*i, c] for s in data for i,
c in enumerate(map(str.strip, s.split(',')))]).fillna('')
Python in Excel solution 2 for Split And Align Columns, proposed by Aditya Kumar Darak 🇮🇳:
data = xl("A1:A5", True)["Data"]
grid = [[None] * i + [x] for row in data for i, x in enumerate(row.split(", "))]
result = pd.DataFrame(grid).fillna("")
result
Solving the challenge of Split And Align Columns with R
R solution 1 for Split And Align Columns, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
path = "Excel/681 Split and Align.xlsx"
input = read_excel(path, range = "A1:A5")
test = read_excel(path, range = "C2:G12", col_names = c("1", "2", "3", "4", "5"))
result = input %>%
mutate(group= row_number()) %>%
separate_rows(Data, sep = ", ") %>%
mutate(col = row_number(), .by = group) %>%
mutate(row = row_number()) %>%
pivot_wider(names_from = col, values_from = Data) %>%
select(-c(group, row))
all.equal(result, test, check.attributes = FALSE) # TRUE
&&
