Home » Pivot Using Suffix Headers

Pivot Using Suffix Headers

Pivot the given data with headers suffixed with 1, 2… If you have PivotBy / GroupBy, try using that.

📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 413
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn

Solving the challenge of Pivot Using Suffix Headers with Power Query

Power Query solution 1 for Pivot Using Suffix Headers, proposed by Kris Jaganah:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group  = Table.Group(Source, {"ID"}, {"All", each _}), 
  Index  = Table.AddColumn(Group, "AA", each Table.AddIndexColumn([All], "Nu", 1, 1)), 
  Xpand  = Table.ExpandTableColumn(Index, "AA", {"Num", "Nu"}, {"Num", "Nu"}), 
  Remove = Table.RemoveColumns(Xpand, {"All"}), 
  AddPre = Table.TransformColumns(Remove, {"Nu", each "Num " & Text.From(_)}), 
  Pivot  = Table.Pivot(AddPre, List.Distinct(AddPre[Nu]), "Nu", "Num")
in
  Pivot
Power Query solution 2 for Pivot Using Suffix Headers, proposed by Aditya Kumar Darak 🇮🇳:
let
  Source = Excel.CurrentWorkbook(){[Name = "data"]}[Content], 
  Group = Table.Group(Source, "ID", {{"Count", Table.RowCount}, {"Filter", each [Num]}}), 
  Sort = Table.Sort(Group, "ID"), 
  Column = List.Transform({1 .. List.Max(Sort[Count])}, each "Num " & Text.From(_)), 
  Output = Table.AddColumn(
    Sort, 
    "Output", 
    each Table.FromRows({[Filter]}, List.FirstN(Column, [Count]))
  )[[ID], [Output]], 
  Return = Table.ExpandTableColumn(Output, "Output", Column, Column)
in
  Return
Power Query solution 3 for Pivot Using Suffix Headers, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Sol = Table.Sort(
    Table.Combine(
      Table.Group(
        Source, 
        {"ID"}, 
        {
          {
            "A", 
            each 
              let
                a = List.Transform({1 .. List.Count([Num])}, each "Num " & Text.From(_)), 
                b = Table.PromoteHeaders(Table.FromRows({{"ID"} & a, {[ID]{0}} & [Num]}))
              in
                b
          }
        }
      )[A]
    ), 
    "ID"
  )
in
  Sol
Power Query solution 4 for Pivot Using Suffix Headers, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Ids = List.Distinct(Source[ID]), 
  Group = Table.Combine(
    Table.Group(
      Source, 
      {"ID"}, 
      {
        {
          "A", 
          each 
            let
              a = [Num], 
              b = List.Transform({1 .. List.Count(a)}, each "Num " & Text.From(_)), 
              c = Table.FromRows({a}, b)
            in
              c
        }
      }
    )[A]
  ), 
  Sol = Table.Sort(
    Table.FromColumns({Ids} & Table.ToColumns(Group), {"ID"} & Table.ColumnNames(Group)), 
    "ID"
  )
in
  Sol
Power Query solution 5 for Pivot Using Suffix Headers, proposed by Luan Rodrigues:
let
  Fonte = Tabela1, 
  gp = Table.Combine(
    Table.Group(
      Fonte, 
      {"ID"}, 
      {
        {
          "tab", 
          each [
            a = {_[ID]{0}} & _[Num], 
            b = List.Transform(
              {0 .. List.Count(a) - 1}, 
              (x) => if x = 0 then "ID" else "Num " & Text.From(x)
            ), 
            c = Table.FromRows({a}, b)
          ][c]
        }
      }
    )[tab]
  ), 
  res = Table.Sort(gp, {"ID", 0})
in
  res
Power Query solution 6 for Pivot Using Suffix Headers, proposed by Brian Julius:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(Source, {"ID"}, {{"All", each _, type table [ID = text, Num = number]}}), 
  AddIndex = Table.RemoveColumns(
    Table.AddColumn(Group, "Custom", each Table.AddIndexColumn([All], "Index", 1, 1)), 
    "All"
  ), 
  Expand = Table.ExpandTableColumn(AddIndex, "Custom", {"Num", "Index"}, {"Num", "Index"}), 
  AddPrefix = Table.TransformColumns(
    Expand, 
    {{"Index", each "Num " & Text.From(_, "en-US"), type text}}
  ), 
  Pivot = Table.Pivot(AddPrefix, List.Distinct(AddPrefix[Index]), "Index", "Num", List.Sum)
in
  Pivot
Power Query solution 7 for Pivot Using Suffix Headers, proposed by Ramiro Ayala Chávez:
let
  S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  a = Table.Sort(Table.Group(S, {"ID"}, {"G", each _}), {"ID", 0}), 
  b = Table.TransformColumns(a, {"G", each Table.Transpose([[Num]])}), 
  c = Table.TransformColumns(
    b, 
    {"G", each Table.TransformColumnNames(_, each Text.Replace(_, "Column", "Num "))}
  ), 
  Sol = Table.ExpandTableColumn(c, "G", {"Num 1", "Num 2", "Num 3", "Num 4", "Num 5"})
in
  Sol
Power Query solution 8 for Pivot Using Suffix Headers, proposed by Eric Laforce:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Group = Table.Group(
    Source, 
    {"ID"}, 
    {
      "All", 
      each 
        let
          CN = {"ID"} & List.Transform({1 .. List.Count(_[Num])}, each "Num " & Text.From(_))
        in
          Table.FromRows({{_[ID]{0}} & _[Num]}, CN)
    }
  ), 
  Result = Table.Sort(Table.Combine(Group[All]), "ID")
in
  Result
Power Query solution 9 for Pivot Using Suffix Headers, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  #"Changed Type" = Table.TransformColumnTypes(Source, {{"Num", type text}}), 
  #"Grouped Rows" = Table.Group(
    #"Changed Type", 
    {"ID"}, 
    {{"Num", each Text.Combine([Num], ","), type number}}
  ), 
  #"Split Column by Delimiter" = Table.SplitColumn(
    Table.TransformColumnTypes(#"Grouped Rows", {{"Num", type text}}, "en-US"), 
    "Num", 
    Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), 
    {"Num1", "Num2", "Num3", "Num4", "Num5"}
  ), 
  #"Sorted Rows" = Table.Sort(#"Split Column by Delimiter", {{"ID", Order.Ascending}})
in
  #"Sorted Rows"
Power Query solution 10 for Pivot Using Suffix Headers, proposed by Rafael González B.:
let
  Source = Excel.CurrentWorkbook(){0}[Content], 
  LAc = List.Accumulate, 
  LID = Source[ID], 
  ListID = List.Sort(List.Distinct(LID)), 
  LA = LAc(
    ListID, 
    {}, 
    (s, c) =>
      let
        d = List.PositionOf(LID, c, 2), 
        e = {{c} & List.Transform(d, each Number.From(Source[Num]{_}))}
      in
        s & e
  ), 
  LZ = Table.FromColumns(List.Zip(LA), {"ID"} & LAc({"1" .. "5"}, {}, (x, y) => x & {"Num " & y}))
in
  LZ
Power Query solution 11 for Pivot Using Suffix Headers, proposed by Rafael González B.:
let
 Source = Excel.CurrentWorkbook(){0}[Content], 
 TTC = Table.TransformColumnTypes, 
 TCN = Table.ColumnNames, 
 TC = TTC(Source, {{"ID", type text}, {"Num", type text}}), 
 Sort = Table.Buffer(Table.Sort(TC, {{"ID", Order.Ascending}})), 
 GroupBy = Table.Group(Sort, {"ID"}, {{"Grouping", each _[Num]}}), 
 Values = GroupBy[Grouping], 
 Combine = Table.FromList(
 List.Transform(Values, each Text.Combine(_, "|")), 
 Splitter.SplitByNothing(), 
 {"Num"}), 
 SplitColumn = Table.SplitColumn(
 Combine, 
 "Num", 
 Splitter.SplitTextByDelimiter("|"), 
 {"Num1", "Num2", "Num3", "Num4", "Num5"}), 
 GetTable = Table.FromColumns(
 {GroupBy[ID]} & Table.ToColumns(SplitColumn), 
 {"ID"} & TCN(SplitColumn)), 
 Result = TTC(GetTable, List.Transform(List.Skip(TCN(GetTable)), each {_, type number}))
in
 Result

P.D: The last line of this code: ¡Thanks Bhavya Gupta 👏🏻👏🏻!


                    
                  
          
Power Query solution 12 for Pivot Using Suffix Headers, proposed by Luke Jarych:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Grouped = Table.Group(Source, {"ID"}, {{"GroupBy", each _}}), 
  Indexed = Table.TransformColumns(
    Grouped, 
    {
      "GroupBy", 
      each 
        let
          a = Table.AddIndexColumn(_, "Index", 1, 1), 
          b = Table.AddColumn(a, "NumName", each "Num " & Text.From([Index]))
        in
          b
    }
  ), 
  RemoveCol = Table.RemoveColumns(Indexed, "ID"), 
  ExpandedTable = Table.ExpandTableColumn(
    RemoveCol, 
    "GroupBy", 
    {"ID", "Num", "NumName"}, 
    {"ID", "Num", "NumName"}
  ), 
  Pivoted = Table.Pivot(ExpandedTable, List.Distinct(ExpandedTable[NumName]), "NumName", "Num")
in
  Pivoted
Power Query solution 13 for Pivot Using Suffix Headers, proposed by Glyn Willis:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  #"Changed Type" = Table.TransformColumnTypes(Source, {{"ID", type text}, {"Num", Int64.Type}}), 
  #"Grouped Rows" = Table.Group(
    #"Changed Type", 
    {"ID"}, 
    {
      {
        "d", 
        each 
          let
            n = List.Buffer([Num])
          in
            Table.FromRows(
              {{[ID]{0}} & n}, 
              {"ID"} & List.Transform({1 .. List.Count(n)}, (x) => "Num " & Text.From(x))
            ), 
        type table
      }
    }
  ), 
  d = Table.Combine(#"Grouped Rows"[d]), 
  #"Sorted Rows" = Table.Sort(d, {{"ID", Order.Ascending}})
in
  #"Sorted Rows"
Power Query solution 14 for Pivot Using Suffix Headers, proposed by Tyler N.:
let
  s = YourTable, 
  a = Table.AddColumn(
    Table.Sort(Table.Distinct(s[[ID]], "ID"), "ID"), 
    "b", 
    each 
      let
        a = s, 
        b = [ID], 
        c = Table.AddColumn(
          Table.AddIndexColumn(Table.SelectRows(a, each [ID] = b)[[Num]], "I", 1, 1), 
          "n", 
          each "Num " & Text.From([I])
        )[[Num], [n]], 
        z = Table.Pivot(c, List.Distinct(c[n]), "n", "Num")
      in
        z
  ), 
  t = Table.ColumnNames(Table.Combine(a[b])), 
  x = Table.ExpandTableColumn(a, "b", t, t)
in
  x
Power Query solution 15 for Pivot Using Suffix Headers, proposed by Alexandra Popoff:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table"]}[Content], 
  // Prep: Gp by Id and add an Index to each line of the each sub group  
  #"Gp: by ID" = Table.Group(
    Source, 
    {"ID"}, 
    {{"Data", each _, type table [ID = text, Num = number]}}
  ), 
  #"Gp: Add Index to Sub Gp" = Table.AddColumn(
    #"Gp: by ID", 
    "Data Index", 
    each Table.AddIndexColumn([Data], "Idx Line", 1), 
    type number
  ), 
  #"Gp: Keep Treated Data" = Table.SelectColumns(#"Gp: Add Index to Sub Gp", {"Data Index"}), 
  // Reimport Data 
  #"Reimport Data" = Table.ExpandTableColumn(
    #"Gp: Keep Treated Data", 
    "Data Index", 
    {"ID", "Num", "Idx Line"}, 
    {"ID", "Num", "Idx Line"}
  ), 
  #"Fix Data Type" = Table.TransformColumnTypes(
    #"Reimport Data", 
    {{"ID", type text}, {"Idx Line", type text}, {"Num", type number}}
  ), 
  #"Add Prefix to Row Name" = Table.TransformColumns(
    #"Fix Data Type", 
    {{"Idx Line", each "Num " & Text.From(_, "fr-FR"), type text}}
  ), 
  // Output 
  #"Out: Pivoted Row Name Col" = Table.Pivot(
    #"Add Prefix to Row Name", 
    List.Distinct(#"Add Prefix to Row Name"[#"Idx Line"]), 
    "Idx Line", 
    "Num", 
    List.Sum
  ), 
  #"Out: Sort Table" = Table.Sort(#"Out: Pivoted Row Name Col", {{"ID", Order.Ascending}})
in
  #"Out: Sort Table"
Power Query solution 16 for Pivot Using Suffix Headers, proposed by Karunakaran S K P:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  #"Changed Type" = Table.TransformColumnTypes(Source, {{"ID", type text}, {"Num", Int64.Type}}), 
  #"Grouped Rows" = Table.Group(
    #"Changed Type", 
    {"ID"}, 
    {{"All Data", each _, type table [ID = text, Num = number]}}
  ), 
  #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Num", each Table.Column([All Data], "Num")), 
  #"Removed Columns" = Table.RemoveColumns(#"Added Custom", {"All Data"}), 
  #"Extracted Values" = Table.TransformColumns(
    #"Removed Columns", 
    {"Num", each Text.Combine(List.Transform(_, Text.From), ","), type text}
  ), 
  #"Split Column by Delimiter" = Table.SplitColumn(
    #"Extracted Values", 
    "Num", 
    Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), 
    {"Num.1", "Num.2", "Num.3", "Num.4", "Num.5"}
  ), 
  #"Changed Type1" = Table.TransformColumnTypes(
    #"Split Column by Delimiter", 
    {
      {"Num.1", Int64.Type}, 
      {"Num.2", Int64.Type}, 
      {"Num.3", Int64.Type}, 
      {"Num.4", Int64.Type}, 
      {"Num.5", Int64.Type}
    }
  )
in
  #"Changed Type1"
Power Query solution 17 for Pivot Using Suffix Headers, proposed by Cristobal Salcedo Beltran:
let
  Source = Excel.CurrentWorkbook(){0}[Content], 
  #"Grouped Rows" = Table.Group(
    Source, 
    {"ID"}, 
    {"Num", each Text.Combine(List.Transform([Num], Text.From), "|"), type text}
  ), 
  #"Sorted Rows" = Table.Sort(#"Grouped Rows", {{"ID", Order.Ascending}}), 
  #"Split Column by Delimiter" = Table.SplitColumn(
    #"Sorted Rows", 
    "Num", 
    Splitter.SplitTextByDelimiter("|", QuoteStyle.Csv), 
    {"Num 1", "Num 2", "Num 3", "Num 4", "Num 5"}
  )
in
  #"Split Column by Delimiter"

Solving the challenge of Pivot Using Suffix Headers with Excel

Excel solution 1 for Pivot Using Suffix Headers, proposed by Rick Rothstein:
=LET(
    u,
    SORT(
        UNIQUE(
            A2:A15
        )
    ),
    d,
    DROP(
        HSTACK(
            u,
            IFNA(
                TEXTSPLIT(
                    REDUCE(
                        "",
                        u,
                        LAMBDA(
                            a,
                            x,
                            a&TEXTJOIN(
                                "*",
                                ,
                                FILTER(
                                    B2:B15,
                                    A2:A15=x
                                )
                            )&"/"
                        )
                    ),
                    "*",
                    "/"
                ),
                ""
            )
        ),
        -1
    ),
    VSTACK(
        HSTACK(
            "ID",
            "Num"&SEQUENCE(
                ,
                COLUMNS(
                    d
                )-1
            )
        ),
        d
    )
)
Excel solution 2 for Pivot Using Suffix Headers, proposed by محمد حلمي:
=REDUCE(
    D1:I1,
    SORT(
        UNIQUE(
            A2:A15
        )
    ),
    LAMBDA(
        a,
        d,
        
        IFNA(
            VSTACK(
                a,
                HSTACK(
                    d,
                    TOROW(
                        FILTER(
                            B2:B15,
                            A2:A15=d
                        )
                    )
                )
            ),
            ""
        )
    )
)
Excel solution 3 for Pivot Using Suffix Headers, proposed by 🇰🇷 Taeyong Shin:
=LET(
    id,
    A1:A15,
    F,
    LAMBDA(
        i,
        LAMBDA(
            x,
            IFERROR(
                INDEX(
                    x,
                    i,
                    1
                ),
                ""
            )
        )
    ),
    DROP(
        GROUPBY(
            id,
            B1:B15,
            MAP(
                SEQUENCE(
                    ,
                    MAX(
                        GROUPBY(
                            id,
                            id,
                            ROWS,
                            ,
                            0
                        )
                    )
                ),
                LAMBDA(
                    x,
                    F(
                        x
                    )
                )
            ),
            3,
            0
        ),
        1
    )
)
Excel solution 4 for Pivot Using Suffix Headers, proposed by 🇰🇷 Taeyong Shin:
=DROP(
    PIVOTBY(
        A1:A15,
        "Num"&MAP(
            A1:A15,
            LAMBDA(
                x,
                COUNTIF(
                    A1:x,
                    x
                )
            )
        ),
        B1:B15,
        SINGLE,
        3,
        0,
        ,
        0
    ),
    1
)
Excel solution 5 for Pivot Using Suffix Headers, proposed by Kris Jaganah:
=LET(
    a,
    SORT(
        A2:B15
    ),
    b,
    DROP(
        a,
        ,
        1
    ),
    c,
    TAKE(
        a,
        ,
        1
    ),
    d,
    "Num "&SEQUENCE(
        ROWS(
            a
        )
    )-XMATCH(
        c,
        c
    )+1,
    PIVOTBY(
        c,
        d,
        b,
        SUM,
        0,
        0,
        ,
        0
    )
)
Excel solution 6 for Pivot Using Suffix Headers, proposed by Kris Jaganah:
=LET(
    a,
    A2:A15,
    b,
    B2:B15,
    c,
    MAP(
        a,
        LAMBDA(
            x,
            COUNTIF(
                TAKE(
                    a,
                    1
                ):x,
                x
            )
        )
    ),
    d,
    SORT(
        UNIQUE(
            a
        )
    ),
    e,
    "Num "&TOROW(
        UNIQUE(
            c
        )
    ),
    VSTACK(
        HSTACK(
            "ID",
            e
        ),
        HSTACK(
            d,
            XLOOKUP(
                d&e,
                a&"Num "&c,
                b,
                ""
            )
        )
    )
)
Excel solution 7 for Pivot Using Suffix Headers, proposed by Julian Poeltl:
=LET(
    I,
    A2:A15,
    N,
    B2:B15,
    F,
    SORTBY(
        N,
        I
    ),
    L,
    SORT(
        I
    ),
    S,
    UNIQUE(
        L
    ),
    R,
    REDUCE(
        "",
        S,
        LAMBDA(
            A,
            B,
            VSTACK(
                A,
                TOROW(
                    FILTER(
                        F,
                        L=B
                    )
                )
            )
        )
    ),
    HSTACK(
        S,
        DROP(
            IFERROR(
                R,
                ""
            ),
            1
        )
    )
)
Excel solution 8 for Pivot Using Suffix Headers, proposed by Timothée BLIOT:
=LET(
    A,
    SORT(
        A2:B15
    ),
    B,
    TAKE(
        A,
        ,
        1
    ),
    PIVOTBY(
        B,
        "Num "&SCAN(
            1,
            SEQUENCE(
                 ROWS(
                     A
                 )
            ),
            LAMBDA(
                w,
                v,
                IF(
                    v>1,
                    IF(
                        INDEX(
                            B,
                            v
                        )=INDEX(
                            B,
                            v-1
                        ),
                        w+1,
                        1
                    ),
                    1
                )
            )
        ),
         TAKE(
             A,
             ,
             -1
         ),
        SUM,
        ,
        0,
        ,
        0
    )
)
Excel solution 9 for Pivot Using Suffix Headers, proposed by Hussein SATOUR:
=LET(
    a,
    A2:A15,
    b,
    SCAN(
        ,
        a,
        CONCAT
    ),
    PIVOTBY(
        a,
        "Num"&LEN(
            b
        )-LEN(
            SUBSTITUTE(
                b,
                a,
                ""
            )
        ),
        B2:B15,
        SUM,
        ,
        0,
        ,
        0
    )
)
Excel solution 10 for Pivot Using Suffix Headers, proposed by Oscar Mendez Roca Farell:
=LET(
    _d,
     A2:A15,
    _u,
     UNIQUE(
         SORT(
             _d
         )
     ),
     REDUCE(
         HSTACK(
             A1,
              B1&SEQUENCE(
                  ,
                   MAX(
                       COUNTIF(
                           _d,
                           _u
                       )
                   )
              )
         ),
         _u,
          LAMBDA(
              i,
               x,
               IFNA(
                   VSTACK(
                       i,
                        UNIQUE(
                            TOROW(
                                FILTER(
                                    A2:B15,
                                     _d=x
                                )
                            ),
                             1
                        )
                   ),
                    ""
               )
          )
     )
)
Excel solution 11 for Pivot Using Suffix Headers, proposed by Oscar Mendez Roca Farell:
=LET(
    _d,
     A2:A15,
    _m,
     MAP(
         _d,
         LAMBDA(
             a,
              COUNTIF(
                  A2:a,
                   a
              )
         )
     ),
    _n,
     TOROW(
         UNIQUE(
             _m
         )
     ),
    _u,
     SORT(
         UNIQUE(
             _d
         )
     ),
     VSTACK(
         HSTACK(
             A1,
              B1&_n
         ),
          HSTACK(
              _u,
               XLOOKUP(
                   _u&_n,
                   _d&_m,
                    B2:B15,
                    ""
               )
          )
     )
)
Excel solution 12 for Pivot Using Suffix Headers, proposed by Duy Tùng:
=LET(
    a,
    PIVOTBY(
        A2:A15,
        "Num "&MAP(
            A2:A15,
            LAMBDA(
                x,
                SUM(
                    N(
                        A2:x=x
                    )
                )
            )
        ),
        B2:B15,
        SINGLE,
        ,
        0,
        ,
        0
    ),
    IF(
        TAKE(
            a,
            1
        )&TAKE(
            a,
            ,
            1
        )="",
        A1,
        a
    )
)
Excel solution 13 for Pivot Using Suffix Headers, proposed by Sunny Baggu:
=LET(
    
     _id,
     SORT(
         UNIQUE(
             A2:A15
         )
     ),
    
     _tbl,
     IF(
         TOROW(
             A2:A15
         ) = _id,
          TOROW(
              B2:B15
          ),
          "x"
     ),
    
     _v,
     DROP(
         
          IFNA(
              
               REDUCE(
                   
                    "",
                   
                    SEQUENCE(
                        ROWS(
                            _id
                        )
                    ),
                   
                    LAMBDA(
                        a,
                         v,
                         VSTACK(
                             a,
                              FILTER(
                                  INDEX(
                                      _tbl,
                                       v,
                                       
                                  ),
                                   INDEX(
                                      _tbl,
                                       v,
                                       
                                  ) <> "x"
                              )
                         )
                    )
                    
               ),
              
               ""
               
          ),
         
          1
          
     ),
    
     VSTACK(
         HSTACK(
             A1,
              B1 & SEQUENCE(
                  ,
                   COLUMNS(
                       _v
                   )
              )
         ),
          HSTACK(
              _id,
               _v
          )
     )
    
)
Excel solution 14 for Pivot Using Suffix Headers, proposed by Sunny Baggu:
=LET(
    
     _id,
     SORT(
         UNIQUE(
             A2:A15
         )
     ),
    
     _r,
     ROWS(
         _id
     ),
    
     _c,
     MAX(
         MAP(
             _id,
              LAMBDA(
                  x,
                   ROWS(
                       FILTER(
                           B2:B15,
                            A2:A15 = x
                       )
                   )
              )
         )
     ),
    
     _v,
     IFERROR(
         
          MAKEARRAY(
              
               _r,
              
               _c,
              
               LAMBDA(
                   r,
                    c,
                    INDEX(
                        TOROW(
                            IF(
                                A2:A15 = INDEX(
                                    _id,
                                     r
                                ),
                                 B2:B15,
                                 x
                            ),
                             3
                        ),
                         c
                    )
               )
               
          ),
         
          ""
          
     ),
    
     VSTACK(
         HSTACK(
             A1,
              B1 & SEQUENCE(
                  ,
                   _c
              )
         ),
          HSTACK(
              _id,
               _v
          )
     )
    
)
Excel solution 15 for Pivot Using Suffix Headers, proposed by LEONARD OCHEA 🇷🇴:
=PIVOTBY(
    A2:A15,
    "Num "&MAP(
        A2:A15,
        LAMBDA(
            a,
            COUNTIF(
                A2:a,
                a
            )
        )
    ),
    B2:B15,
    SUM,
    0,
    0,
    ,
    0
)
Excel solution 16 for Pivot Using Suffix Headers, proposed by Abdallah Ally:
=LET(
    a,
    A2:A15,
    b,
    B2:B15,
    c,
    REDUCE(
        "",
        SORT(
            UNIQUE(
                a
            )
        ),
        LAMBDA(
            x,
            y,
             VSTACK(
                 x,
                 HSTACK(
                     y,
                     TOROW(
                         FILTER(
                             b,
                             a=y
                         )
                     )
                 )
             )
        )
    ),
    IFNA(
        VSTACK(
            HSTACK(
                "ID",
                "Num "&SEQUENCE(
                    ,
                    COLUMNS(
                        c
                    )-1
                )
            ),
            DROP(
                c,
                1
            )
        ),
        ""
    )
)
Excel solution 17 for Pivot Using Suffix Headers, proposed by Asheesh Pahwa:
=LET(
    id,
    A2:A15,
    nm,
    B2:B15,
    
    u,
    SORT(
        UNIQUE(
            id
        )
    ),
    
    r,
    IFNA(
        DROP(
            REDUCE(
                "",
                u,
                LAMBDA(
                    x,
                    y,
                    VSTACK(
                        x,
                        TOROW(
                            FILTER(
                                nm,
                                id=y
                            )
                        )
                    )
                )
            ),
            1
        ),
        ""
    ),
    
    VSTACK(
        HSTACK(
            "ID",
            "Num "&SEQUENCE(
                ,
                COLUMNS(
                    r
                )
            )
        ),
        HSTACK(
            u,
            r
        )
    )
)
Excel solution 18 for Pivot Using Suffix Headers, proposed by Charles Roldan:
=LET(ID,
     A2:A15,
     Num,
     B2:B15,
     Main,
     LAMBDA(
         a,
          HSTACK(
              a,
               TOROW(
                   FILTER(
                       Num,
                        ID = a
                   )
               )
          )
     ),
     VLoop,
     LAMBDA(f,
     LAMBDA(
         g,
          g(
              g
          )
     )(LAMBDA(g,
     LAMBDA(x,
     IFNA(IF(ROWS(
         x
     ) = 1,
     f(
         x
     ),
     VSTACK(f(
         TAKE(
             x,
              1
         )
     ),
     g(
              g
          )(DROP(
             x,
              1
         )))),
     ""))))),
     VLoop(
         Main
     )(SORT(
         UNIQUE(
             ID
         )
     )))
Excel solution 19 for Pivot Using Suffix Headers, proposed by Charles Roldan:
=LET(ID,
     A2:A15,
     Num,
     B2:B15,
     Main,
     LAMBDA(
         x,
          HSTACK(
              x,
               TOROW(
                   FILTER(
                       Num,
                        ID = x
                   )
               )
          )
     ),
     R,
     LAMBDA(
         f,
          LAMBDA(
              x,
               IFNA(
                   DROP(
                       REDUCE(
                           "",
                            SEQUENCE(
                                ROWS(
                                    x
                                )
                            ),
                            LAMBDA(
                                a,
                                b,
                                 VSTACK(
                                     a,
                                      f(
                                          INDEX(
                                              x,
                                               b
                                          )
                                      )
                                 )
                            )
                       ),
                        1
                   ),
                    ""
               )
          )
     ),
     Body,
     R(
         Main
     )(SORT(
         UNIQUE(
             ID
         )
     )),
     VSTACK(
         HSTACK(
             "ID",
              "Num " & SEQUENCE(
                  ,
                   COLUMNS(
                       Body
                   ) - 1
              )
         ),
          Body
     ))
Excel solution 20 for Pivot Using Suffix Headers, proposed by Bilal Mahmoud kh.:
=x))))),
    ",",
    "|",
    TRUE),
    "")
Excel solution 21 for Pivot Using Suffix Headers, proposed by Milan Shrimali:
=let(
    a,
    A1:A15,
    b,
    B1:B15,
    u,
    unique(
        a
    ),
    data,
    map(
        u,
        lambda(
            x,
            transpose(
                filter(
                    b,
                    a=x
                )
            )
        )
    ),
    header,
    "NUM " & sequence(
        1,
        max(
            byrow(
                data,
                lambda(
                    aa,
                    counta(
                        aa
                    )
                )
            )
        )
    ),
    hstack(
        vstack(
            "ID",
            u
        ),
        vstack(
            header,
            data
        )
    )
)
_x000D_ _x000D_
Excel solution 22 for Pivot Using Suffix Headers, proposed by Oscar Javier Rosero Jiménez:
=LET(
    _a,
    A2:A15,
    _b,
    B2:B15,
    _c,
    SORT(
        UNIQUE(
            _a
        )
    ),
    
    HSTACK(
        _c,
         IFERROR(
             DROP(
                 REDUCE(
                     0,
                      _c,
                      LAMBDA(
                          i,
                          x,
                           VSTACK(
                               i,
                                TOROW(
                                    FILTER(
                                        _b,
                                        _a=x
                                    )
                                )
                           )
                      )
                 ),
                 1
             ),
             ""
         )
    )
)
_x000D_ _x000D_
Excel solution 23 for Pivot Using Suffix Headers, proposed by Giorgi Goderdzishvili:
= pd.read_clipboard()
mapping = df.groupby(
    "ID"
).cumcount().add(
    1
)
df["Num2"] = "Num" + df.index.map(
    mapping
).astype(
    str
) 
nw_df = df.pivot(
    index="ID",
    columns="Num2"
).fillna(
    ''
)
_x000D_ _x000D_
Excel solution 24 for Pivot Using Suffix Headers, proposed by Songglod P.:
=LET(
    ids,
    A2:A15,
    nums,
    B2:B15,
    uids,
    SORT(
        UNIQUE(
            ids
        )
    ),
    group_nums,
    DROP(
        REDUCE(
            "",
            uids,
            LAMBDA(
                curr,
                val,
                VSTACK(
                    curr,
                    TOROW(
                        FILTER(
                            nums,
                            ids=val
                        )
                    )
                )
            )
        ),
        1
    ),
    IFNA(
        HSTACK(
            uids,
            group_nums
        ),
        ""
    )
)
_x000D_ _x000D_
Excel solution 25 for Pivot Using Suffix Headers, proposed by Burhan Cesur:
=LET(
    b,
    VSTACK(
        "title",
        MAP(
            A2:A15,
            LAMBDA(
                x,
                "Num "&COUNTIF(
                    A2:x,
                    x
                )
            )
        )
    ),
    t,
    A1:B15,
    c,
    HSTACK(
        t,
        b
    ),
    DROP(
        PIVOTBY(
            CHOOSECOLS(
                c,
                1
            ),
            CHOOSECOLS(
                c,
                3
            ),
            CHOOSECOLS(
                c,
                2
            ),
            VALUE,
            3,
            0,
            ,
            0
        ),
        1
    )
)
_x000D_ _x000D_
Excel solution 26 for Pivot Using Suffix Headers, proposed by Tyler Cameron:
=LET(
    a,
    SORT(
        UNIQUE(
            A2:A15
        ),
        ,
        1
    ),
    HSTACK(
        a,
        MAKEARRAY(
            4,
            5,
            LAMBDA(
                r,
                c,
                IFERROR(
                    INDEX(
                        FILTER(
                            B2:B15,
                            A2:A15=INDEX(
                                a,
                                r
                            )
                        ),
                        c
                    ),
                    ""
                )
            )
        )
    )
)
_x000D_ _x000D_
Excel solution 27 for Pivot Using Suffix Headers, proposed by Crispo Mwangi:
="Num "&COUNTIF(
    $A$2:A2,
    A2
)
_x000D_ _x000D_
Excel solution 28 for Pivot Using Suffix Headers, proposed by Luis Couto:
=DROP(PIVOTBY(A1:A15,"Num "&MAP(A1:A15,LAMBDA(x,SUM(--(A2:x=x)))),B1:B15,SUM,3,0,,0,),1)
without PIVOTBY:
=LET(u,UNIQUE(SORT(A2:A15)),n,IFNA(REDUCE("",u,LAMBDA(a,i,VSTACK(a,TOROW(IF(A2:A15=i,B2:B15,T),3)))),""),HSTACK(VSTACK("ID",u),VSTACK("Num "&SEQUENCE(,COLUMNS(n)),DROP(n,1))))
_x000D_ _x000D_
Excel solution 29 for Pivot Using Suffix Headers, proposed by James Mott:
=LET(
    a,
    A2:A15,
    VSTACK(
        HSTACK(
            A1,
            B1&SEQUENCE(
                ,
                MAX(
                    COUNTIF(
                        a,
                        a
                    )
                )
            )
        ),
        HSTACK(
            SORT(
                UNIQUE(
                    a
                )
            ),
            
            IFNA(
                TEXTSPLIT(
                    TEXTJOIN(
                        ".",
                        ,
                        INDEX(
                            GROUPBY(
                                A1:A15,
                                B1:B15,
                                ARRAYTOTEXT,
                                ,
                                0
                            ),
                            ,
                            2
                        )
                    ),
                    ", ",
                    "."
                ),
                ""
            )
        )
    )
)
_x000D_ _x000D_
Excel solution 30 for Pivot Using Suffix Headers, proposed by Alexandra Popoff:
= LAMBDA(
    Col_Header_Name ,
     Row_Prefix_Name,
     Col_Value,
     Data_Value,
    [Empty_Default],
    
     LET(
         
          Opt_NF,
         if(
             isomitted(
                 Empty_Default
             ),
             "",
             Empty_Default
         ),
         
          Y_List,
         SORT(
             UNIQUE(
                 Col_Value
             )
         ),
         
          Y_List_Max,
         BYROW(
             Y_List,
             
              LAMBDA(
                  z_i,
                  
                   ROWS(
                       FILTER(
                           Col_Value,
                           Col_Value=z_i
                       )
                   )
                   
              )
         ),
         
          Y_Max,
         ROWS(
             Y_List
         ),
         
          X_Max,
         MAX(
             Y_List_Max
         ),
         
          Out_Value,
         MAKEARRAY(
             Y_Max,
             X_Max,
             LAMBDA(
                 z_Y,
                 z_X,
                 
                  IFERROR(
                      
                       INDEX(
                           
                            FILTER(
                                Data_Value,
                                Col_Value=INDEX(
                                    Y_List,
                                    z_Y
                                )
                            ),
                           
                            z_X
                       ),
                      
                       Opt_NF
                  )
             )
         ),
         
          Out_Header,
         Row_Prefix_Name&" "&TEXT(
             SEQUENCE(
                 1,
                 X_Max,
                 1,
                 1
             ),
             "0"
         ),
         
          VSTACK(
              HSTACK(
                  Col_Header_Name,
                  Out_Header
              ),
              HSTACK(
                  Y_List,
                  Out_Value
              )
          )
          
     )
    
)
_x000D_

Solving the challenge of Pivot Using Suffix Headers with Python

_x000D_
Python solution 1 for Pivot Using Suffix Headers, proposed by Luke Jarych:
import xlwings as xw
import pandas as pd
import csv
import io
wb = xw.Book(r'Excel_Challenge_413 - Pivot.xlsx')
sh = wb.sheets[0]
table = sh.tables['Table1']
rng = sh.range(table.range.address)
df = rng.options(pd.DataFrame, header = True, index=False, numbers=int).value
df.sort_values(by='ID', inplace=True)
df['Index'] = 'Num ' + (df.groupby('ID').cumcount() + 1).astype(str)
df = df.pivot(index='ID', columns='Index', values='Num')
df.fillna(0, inplace=True)
df.replace(0, '', inplace = True)
df = df.applymap(lambda x: x.split('.')[0] if '.' in x else x)
                    
                  
_x000D_

Solving the challenge of Pivot Using Suffix Headers with Python in Excel

_x000D_
Python in Excel solution 1 for Pivot Using Suffix Headers, proposed by Abdallah Ally:
import pandas as pd
file_path = 'Excel_Challenge_413 - Pivot.xlsx'
df = pd.read_excel(file_path, usecols='A:B')
df_test = pd.read_excel(file_path, usecols='D:I').dropna(subset=['ID.1']).rename(columns={'ID.1': 'ID'})
df['Serial'] = 'Num ' + (df.groupby('ID').cumcount() + 1).astype(str)
df = df.pivot(index='ID', columns='Serial', values='Num')
df = df.rename_axis(None, axis=1).reset_index()
for d in [df, df_test]:
 for col in [x for x in d.columns if 'Num' in x]:
 d[col] = df[col].apply(lambda x: pd.to_numeric(x, errors='coerce')).fillna(-1).astype(int).astype(str)
 d[col] = d[col].replace('-1', '')
print(f'Expected Results:n{df_test}nnMy Results:n{df}')
                    
                  
_x000D_

Solving the challenge of Pivot Using Suffix Headers with R

_x000D_
R solution 1 for Pivot Using Suffix Headers, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
input = read_excel("Excel/413 Pivot.xlsx", range = "A1:B15")
test = read_excel("Excel/413 Pivot.xlsx", range = "D1:I5")
result = input %>%
 group_by(ID) %>%
 mutate(rn = row_number()) %>%
 pivot_wider(names_from = rn, names_prefix = "Num ", values_from = Num) %>%
 ungroup() %>%
 arrange(ID)
                    
                  
_x000D_

Leave a Reply