Home » Match Names with Same Initials

Match Names with Same Initials

List the names if first character of first name and first character of last name are same. Ex. Billy James, Bob Simon Julian (First name 1st char: B and Last name 1st char: J are same)

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

Solving the challenge of Match Names with Same Initials with Power Query

Power Query solution 1 for Match Names with Same Initials, proposed by Kris Jaganah:
let
  A = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  B = Table.AddColumn(
    A, 
    "Ans", 
    each [a = Text.Split([Names], " "), b = Text.Start(a{0}, 1) & Text.Start(List.Last(a), 1)][b]
  ), 
  C = Table.SelectRows(B, each List.Count(List.Select(B[Ans], (x) => x = [Ans])) > 1), 
  D = Table.Sort(C, "Names")[[Names]]
in
  D
Power Query solution 2 for Match Names with Same Initials, proposed by Aditya Kumar Darak 🇮🇳:
let
  Source = Excel.CurrentWorkbook(){[Name = "data"]}[Content], 
  Helper = Table.AddColumn(
    Source, 
    "H", 
    each Text.Start([Names], 1) & Text.End(Text.Select([Names], {"A" .. "Z"}), 1)
  ), 
  Group = Table.Group(Helper, "H", {"Names", each [[Names]]}), 
  Filter = List.Select(Group[Names], each Table.RowCount(_) > 1), 
  Return = Table.Combine(Filter)
in
  Return
Power Query solution 3 for Match Names with Same Initials, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Col = Table.AddColumn(
    Source, 
    "A", 
    each 
      let
        a = List.Transform(Text.Split([Names], " "), each Text.Start(_, 1)), 
        b = a{0} & List.Last(a)
      in
        b
  ), 
  Group = Table.Group(Col, {"A"}, {{"B", each _}, {"C", each Table.RowCount(_)}}), 
  Sol = Table.Combine(Table.SelectRows(Group, each ([C] <> 1))[B])[[Names]]
in
  Sol
Power Query solution 4 for Match Names with Same Initials, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Lst = Table.AddColumn(
    Source, 
    "A", 
    each 
      let
        a = List.Transform(Text.Split([Names], " "), each Text.Start(_, 1)), 
        b = a{0} & List.Last(a)
      in
        b
  ), 
  Lst2 = List.Select(List.Distinct(Lst[A]), each List.Count(List.Select(Lst[A], (x) => x = _)) > 1), 
  Tbl = Table.SelectRows(Lst, each List.Contains(Lst2, [A])), 
  Sol = Table.Sort(Tbl, {{"A", 0}})[[Names]]
in
  Sol
Power Query solution 5 for Match Names with Same Initials, proposed by Abdallah Ally:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  f = (x) => [a = Text.Split(x, " "), b = Text.At(a{0}, 0) & Text.At(List.Last(a), 0)][b], 
  Initials = List.Transform(Source[Names], f), 
  Result = Table.Sort(
    Table.SelectRows(Source, each List.Count(List.Select(Initials, (x) => x = f([Names]))) > 1), 
    each [Names]
  )
in
  Result
Power Query solution 6 for Match Names with Same Initials, proposed by Ramiro Ayala Chávez:
let
  S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  LT = List.Transform, 
  LZ = List.Zip, 
  a = LT(S[Names], each Text.Split(_, " ")), 
  b = LT(a, each if List.Count(_) > 2 then {_{0}} & {_{2}} else _), 
  c = LT(b, each LT(_, each Text.Start(_, 1))), 
  d = Table.FromColumns(LZ(LT(LZ({c, a}), List.Combine))), 
  e = Table.Group(d, {"Column1", "Column2"}, {"G", each _})[G], 
  f = Table.Combine(List.Select(e, each Table.RowCount(_) > 1)), 
  Sol = Table.AddColumn(
    f, 
    "Answer Expected", 
    each Text.Combine({[Column3], [Column4], [Column5]}, " ")
  )[[Answer Expected]]
in
  Sol
Power Query solution 7 for Match Names with Same Initials, proposed by Seokho MOON:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  FC = Table.AddColumn(
    Source, 
    "FC", 
    each [A = Text.Select([Names], {"A" .. "Z"}), B = Text.Start(A, 1) & Text.End(A, 1)][B]
  ), 
  Grouped = Table.Group(FC, {"FC"}, {"tbl", each _}), 
  Res = Table.Combine(List.Select(Grouped[tbl], each Table.RowCount(_) >= 2), {"Names"})
in
  Res
Power Query solution 8 for Match Names with Same Initials, proposed by Rafael González B.:
let
 Source = Question_Table,
 AC = Table.AddColumn(Source, "textselect", each 
 let 
 a = Text.Select([Names], {"A".."Z"}),
 b = Text.Start(a,1) & Text.End(a,1)
 in 
 b 
 ),
 GR = Table.Group(AC, 
 {"textselect"}, 
 {{"Count", each Table.RowCount(_)}, {"Details", each _}}
 ),
 FT = Table.Combine(Table.SelectRows(GR, each [Count] > 1)[Details], {"Names"})
in
 FT
🧙🏻‍♂️🧙🏻‍♂️🧙🏻‍♂️



                    
                  
          
Power Query solution 9 for Match Names with Same Initials, proposed by CA Raghunath Gundi:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  FirstNameFirst = Table.AddColumn(Source, "FirstNameFirst", each Text.Start([Names], 1)), 
  DuplicateColumn = Table.DuplicateColumn(FirstNameFirst, "Names", "Name"), 
  LastNameFirst = Table.TransformColumns(
    Table.SplitColumn(
      DuplicateColumn, 
      "Names", 
      Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true), 
      {"Name.1", "LastNameFirst"}
    ), 
    {"LastNameFirst", each Text.Start(_, 1)}
  ), 
  Merge = Table.CombineColumns(
    LastNameFirst, 
    {"FirstNameFirst", "LastNameFirst"}, 
    Combiner.CombineTextByDelimiter("", QuoteStyle.None), 
    "Criteria"
  ), 
  Group = Table.Group(
    Merge, 
    {"Criteria"}, 
    {{"Count", each Table.RowCount(_), Int64.Type}, {"Table", each _}}
  ), 
  Result = Table.Combine(Table.SelectRows(Group, each [Count] > 1)[Table])[[Name]]
in
  Result
Power Query solution 10 for Match Names with Same Initials, proposed by Mihai Radu O:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  a = List.Transform(
    Source[Names], 
    (x) =>
      [a = Text.Split(x, " "), b = List.First(a) & List.Last(a), c = Text.Select(b, {"A" .. "Z"})][
        c
      ]
  ), 
  b = List.Sort(
    List.RemoveNulls(
      List.Transform(
        List.Zip({Source[Names], a}), 
        (x) => if List.Count(List.PositionOf(a, x{1}, Occurrence.All)) > 1 then x{0} else null
      )
    )
  )
in
  b
Power Query solution 11 for Match Names with Same Initials, proposed by Mihai Radu O:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  a = Table.AddColumn(
    Source, 
    "r", 
    each [
      a = Text.Split([Names], " "), 
      b = List.First(a) & List.Last(a), 
      c = Text.Select(b, {"A" .. "Z"})
    ][c]
  ), 
  b = List.Distinct(List.Difference(a[r], List.Distinct(a[r]))), 
  c = Table.Sort(Table.SelectRows(a, each List.Contains(b, [r])), {"Names"})[Names]
in
  c
Power Query solution 12 for Match Names with Same Initials, proposed by Krzysztof Kominiak:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  AddTmp = Table.AddColumn(
    Source, 
    "tmp", 
    each Text.Combine(
      List.Transform(
        {Text.ToList(Text.Select([Names], {"A" .. "Z"}))}, 
        each _{0} & List.Reverse(_){0}
      )
    )
  ), 
  Result = Table.Combine(
    Table.SelectRows(
      Table.Group(AddTmp, {"tmp"}, {{"Count", each Table.RowCount(_) > 1}, {"NT", each [[Names]]}}), 
      each [Count] = true
    )[NT]
  )
in
  Result
Power Query solution 13 for Match Names with Same Initials, proposed by Alejandra Horvath CPA, CGA:
let
  S = Table.Sort(Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], {"Names"}), 
  C = Table.AddColumn(S, "I", each Text.Split([Names], " ")), 
  T = Table.TransformColumns(
    C, 
    {"I", each List.Transform(_, (x) => Text.Start(_{0}, 1) & Text.Start(List.Last(_), 1)){0}}
  ), 
  D = 
    let
      cn = {"I"}, 
      ac = Table.Group(T, cn, {{"C", Table.RowCount}}), 
      sd = Table.SelectRows(ac, each [C] > 1)[[I]]
    in
      Table.Join(T, cn, sd, cn, JoinKind.Inner)[[Names]]
in
  D

Solving the challenge of Match Names with Same Initials with Excel

Excel solution 1 for Match Names with Same Initials, proposed by Bo Rydobon 🇹🇭:
=LET(
    z,
    A2:A20,
    FILTER(
        z,
        COUNTIF(
            z,
            LEFT(
                z
            )&"* "&LEFT(
                TEXTAFTER(
                    z,
                    " ",
                    -1
                )
            )&"*"
        )>1
    )
)

=LET(
    z,
    A2:A20,
    b,
    LEFT(
                z
            )&LEFT(
        TEXTAFTER(
            z,
            " ",
            -1
        )
    ),
    FILTER(
        z,
        MAP(
            b,
            LAMBDA(
                c,
                SUM(
                    N(
                        b=c
                    )
                )
            )
        )>1
    )
)
Excel solution 2 for Match Names with Same Initials, proposed by Rick Rothstein:
=LET(
    n,
    A2:A20,
    i,
    LEFT(
        n
    )&LEFT(
        TEXTAFTER(
            n,
            " ",
            -1
        )
    ),
    r,
    REDUCE(
        "",
        UNIQUE(
            i
        ),
        LAMBDA(
            a,
            x,
            LET(
                f,
                FILTER(
                    n,
                    i=x
                ),
                VSTACK(
                    a,
                    IF(
                        COUNTA(
                            f
                        )>1,
                        f,
                        ""
                    )
                )
            )
        )
    ),
    FILTER(
        r,
        LEN(
            r
        )
    )
)
Excel solution 3 for Match Names with Same Initials, proposed by John V.:
=LET(
    n,
    A2:A20,
    i,
    LEFT(
        n
    )&LEFT(
        TEXTAFTER(
            n,
            " ",
            -1
        )
    ),
    SORT(
        FILTER(
            n,
            BYROW(
                N(
                    i=TOROW(
                        i
                    )
                ),
                SUM
            )>1
        )
    )
)
Excel solution 4 for Match Names with Same Initials, proposed by 🇰🇷 Taeyong Shin:
=LET(d,A2:A20,x,REGEXREPLACE(d,"(.).*(?<= )(.)|.","$1$2"),FILTER(d,MMULT(XMATCH(x,x,,{1,-1}),{-1;1})))
Excel solution 5 for Match Names with Same Initials, proposed by Kris Jaganah:
=LET(
    a,
    A2:A20,
    b,
    LEFT(
        a
    )&LEFT(
        TEXTAFTER(
            a,
            " ",
            -1
        )
    ),
    c,
    MAP(
        b,
        LAMBDA(
            x,
            SUM(
                N(
                    x=b
                )
            )
        )
    ),
    SORT(
        FILTER(
            a,
            c>1
        )
    )
)
Excel solution 6 for Match Names with Same Initials, proposed by Julian Poeltl:
=LET(
    N,
    A2:A20,
    C,
    LEFT(
        N,
        1
    )&LEFT(
        TEXTAFTER(
            N,
            " ",
            -1
        ),
        1
    ),
    G,
    GROUPBY(
        C,
        N,
        COUNTA,
        ,
        0
    ),
    DROP(
        REDUCE(
            0,
            FILTER(
                INDEX(
                    G,
                    ,
                    1
                ),
                INDEX(
                    G,
                    ,
                    2
                )>1
            ),
            LAMBDA(
                A,
                B,
                VSTACK(
                    A,
                    FILTER(
                        N,
                        C=B
                    )
                )
            )
        ),
        1
    )
)
Excel solution 7 for Match Names with Same Initials, proposed by Aditya Kumar Darak 🇮🇳:
=LET(
    
     _names,
     A2:A20,
    
     _fl,
     LEFT(
         _names
     ) & LEFT(
         TEXTAFTER(
             _names,
              " ",
              -1
         )
     ),
    
     _grp,
     GROUPBY(
         _fl,
          _fl,
          ROWS,
          0,
          0
     ),
    
     _fltr,
     FILTER(
         TAKE(
             _grp,
              ,
              1
         ),
          TAKE(
              _grp,
               ,
               -1
          ) > 1
     ),
    
     _rtrn,
     SORT(
         FILTER(
             _names,
              ISNUMBER(
                  XMATCH(
                      _fl,
                       _fltr
                  )
              )
         )
     ),
    
     _rtrn
    
)
Excel solution 8 for Match Names with Same Initials, proposed by Timothée BLIOT:
=LET(A,A2:A20,B,LEFT(A)&LEFT(TEXTAFTER(A," ",-1)), SORT(FILTER(A,MAP(B,LAMBDA(x,SUM(--(x=B))>1)))))
Excel solution 9 for Match Names with Same Initials, proposed by Hussein SATOUR:
=LET(
    L,
    LEFT,
    F,
    FILTER,
    n,
    A2:A20,
    a,
    L(
        n
    )&L(
        TEXTAFTER(
            n,
            " ",
            -1
        )
    ),
    SORT(
        F(
            n,
            MAP(
                a,
                LAMBDA(
                    x,
                    COUNTA(
                        F(
                            a,
                            a=x
                        )
                    )
                )
            )-1
        )
    )
)
Excel solution 10 for Match Names with Same Initials, proposed by Oscar Mendez Roca Farell:
=LET(
    n,
    A2:A20,
    m,
    LEFT(
        n
    )&LEFT(
        TEXTAFTER(
            n,
            " ",
            -1
        )
    ),
    FILTER(
        n,
        1-BYROW(
            N(
                m=TOROW(
                    m
                )
            ),
            SUM
        )
    )
)
Excel solution 11 for Match Names with Same Initials, proposed by Sunny Baggu:
=LET(
    
     _a,
     LEFT(
         A2:A20
     ) & LEFT(
         TEXTAFTER(
             A2:A20,
              " ",
              -1
         )
     ),
    
     _b,
     UNIQUE(
         _a
     ),
    
     _c,
     MAP(
         _b,
          LAMBDA(
              a,
               SUM(
                   N(
                       _a = a
                   )
               )
          )
     ),
    
     _d,
     FILTER(
         _b,
          _c > 1
     ),
    
     DROP(
         
          REDUCE(
              "",
               _d,
               LAMBDA(
                   a,
                    v,
                    VSTACK(
                        a,
                         FILTER(
                             A2:A20,
                              _a = v
                         )
                    )
               )
          ),
         
          1
          
     )
    
)
Excel solution 12 for Match Names with Same Initials, proposed by Abdallah Ally:
= workbook.getActiveWorksheet();
    
 const rngValues = curSheet.getRange(
     'A2:A20'
 ).getValues() as string[][];
    

 function getInitials(
     name: string
 ): string {
 const split = name.split(
     ' '
 );
    
 return split[0][0] + split[split.length - 1][0];
    
 }

 const Initials = rngValues.map(
     x => getInitials(
         x[0]
     )
 );
    

 const filtered = rngValues
 .filter((x, index) => Initials.filter(
     y => y === Initials[index]
 ).length > 1)
 .sort((x, y) => x[0].localeCompare(
     y[0]
 ));
    

 curSheet.getRange(
     `C2:C${1 + filtered.length}`
 ).setValues(
     filtered
 )
Excel solution 13 for Match Names with Same Initials, proposed by Abdallah Ally:
WITH CTE1 AS (
 SELECT Names,
    
 LEFT(
     Names,
      1
 ) + SUBSTRING(
     Names,
      LEN(
          Names
      ) - CHARINDEX(
          ' ',
           REVERSE(
          Names
      )
      ) + 2,
      1
 ) AS Initials
 FROM ExcelChallenge612
),
    
CTE2 AS (
 SELECT Initials,
    
 COUNT(
     *
 ) AS Occurrences
 FROM CTE1
 GROUP BY Initials
)
SELECT CTE1.Names
FROM CTE1
INNER JOIN CTE2 ON CTE1.Initials = CTE2.Initials
ORDER BY CTE1.Names
Excel solution 14 for Match Names with Same Initials, proposed by Abdallah Ally:
=LET(f,
    LAMBDA(
        x,
        LEFT(
            x
        )&LEFT(
            TEXTAFTER(
                x,
                " ",
                -1
            )
        )
    ),
    a,
    A2:A20,
    b,
     MAP(
         a,
         f
     ),
    SORT(FILTER(a,
    MAP(a,
    LAMBDA(x,
    SUM(--(f(
            x
        )=b))>1)))))
Excel solution 15 for Match Names with Same Initials, proposed by Anshu Bantra:
=LET(
    
    data_,
     A2:A20,
    
    full_ini_,
     MAP(
          data_,
          LAMBDA(
              val,
               ARRAYTOTEXT(
                   LEFT(
                       TEXTSPLIT(
                           val,
                            " "
                       )
                   )
               )
          )
     ),
    
    short_ini_,
     BYROW(
         full_ini_,
          LAMBDA(
              x,
               TEXTJOIN(
                   ", ",
                   ,
                   LEFT(
                       x
                   ),
                   RIGHT(
                       x
                   )
               )
          )
     ),
    
    FILTER(
         data_,
         MAP(
              short_ini_,
              LAMBDA(
                  x,
                   SUM(
                       IF(
                           short_ini_=x,
                            1,
                            0
                       )
                   )
              )
         )>1
    )
    
)
Excel solution 16 for Match Names with Same Initials, proposed by Md. Zohurul Islam:
=LET(
    z,
    A2:A20,
    
    a,
    MAP(
        z,
        LAMBDA(
            x,
            LET(
                p,
                TEXTSPLIT(
                    x,
                    " "
                ),
                q,
                LEFT(
                    TAKE(
                        p,
                        ,
                        1
                    )
                ),
                s,
                LEFT(
                    TAKE(
                        p,
                        ,
                        -1
                    )
                ),
                u,
                q&s,
                u
            )
        )
    ),
    
    b,
    MAP(
        a,
        LAMBDA(
            y,
            SUM(
                ABS(
                    a=y
                )
            )
        )
    ),
    
    d,
    SORT(
        FILTER(
            z,
            b>1
        )
    ),
    
    d
)
Excel solution 17 for Match Names with Same Initials, proposed by Pieter de B.:
=LET(a,SORT(A2:A20),b,LEFT(a)&LEFT(TEXTAFTER(a," ",-1)),FILTER(a,BYROW(b,LAMBDA(c,SUM(N(b=c))))-1))
Excel solution 18 for Match Names with Same Initials, proposed by Hamidi Hamid:
=LET(
    z,
    HSTACK(
        A2:A20,
        LEFT(
            A2:A20,
            1
        )&LEFT(
            TEXTAFTER(
                A2:A20,
                " ",
                -1
            ),
            1
        )
    ),
    x,
    MAP(
        UNIQUE(
            TAKE(
                z,
                ,
                -1
            )
        ),
        LAMBDA(
            a,
            TEXTJOIN(
                "-",
                ,
                FILTER(
                    TAKE(
                        z,
                        ,
                        1
                    ),
                    TAKE(
                z,
                ,
                -1
            )=a
                )
            )
        )
    ),
    r,
    FILTER(
        x,
        ISNUMBER(
            SEARCH(
                "-",
                x
            )
        )
    ),
    DROP(
        REDUCE(
            0,
            r,
            LAMBDA(
                a,
                b,
                VSTACK(
                    a,
                    TEXTSPLIT(
                        b,
                        ,
                        "-",
                        
                    )
                )
            )
        ),
        1
    )
)
Excel solution 19 for Match Names with Same Initials, proposed by ferhat CK:
=LET(r,A2:A20,b,LEFT(TEXTBEFORE(r," ",-1))&LEFT(TEXTAFTER(r," ",-1)),SORT(FILTER(r,ISNA(XMATCH(b,UNIQUE(b,,1))))))
Excel solution 20 for Match Names with Same Initials, proposed by Andy Heybruch:
=LET(_names,A2:A20,
_initials,BYROW(_names,LAMBDA(a,LEFT(a)&MID(a,XMATCH(" ",MID(a,SEQUENCE(LEN(a)),1),0,-1)+1,1))),
_ct,GROUPBY(_initials,_initials,COUNTA,0,0,-2),
_filt,TAKE(FILTER(_ct,TAKE(_ct,,-1)>1),,1),
FILTER(_names,ISNUMBER(XMATCH(_initials,_filt))))
Excel solution 21 for Match Names with Same Initials, proposed by Imam Hambali:
=LET(
n, A2:A20,
a, LEFT(TEXTAFTER(" "&n," ",SEQUENCE(,3),,1)),
cc, CHOOSECOLS,
i, cc(a,1)&IF(cc(a,3)<>"",cc(a,3),cc(a,2)),
g, GROUPBY(i,i,COUNTA,0,0),
FILTER(n, BYROW(i=TRANSPOSE(FILTER(cc(g,1),cc(g,2)>1)),OR))
)
Excel solution 22 for Match Names with Same Initials, proposed by Gerson Pineda:
=LET(l,LEFT,t,SORT(A2:A20),i,l(t)&l(TEXTAFTER(t," ",-1)),FILTER(t,MAP(i,LAMBDA(x,SUM(N(x=i))))>1))
Excel solution 23 for Match Names with Same Initials, proposed by Victor Momoh (MVP, MOS, R.Eng):
=LET(x,A2:A20,a,LEFT(x)&LEFT(TEXTAFTER(x," ",-1)),FILTER(x,1
Excel solution 24 for Match Names with Same Initials, proposed by Nicolas Micot:
=LET(_names;
    A2:A20;
    _letters;
    MAP(
        _names;
        LAMBDA(
            l_name;
            GAUCHE(
                l_name;
                1
            )&GAUCHE(
                PRENDRE(
                    FRACTIONNER.TEXTE(
                        l_name;
                        ;
                        " "
                    );
                    -1
                );
                1
            )
        )
    );
    
_hasDupplicateLetters;
    MAP(_letters;
    LAMBDA(l_letters;
    SOMME(--(_letters=l_letters))>=2));
    
TRIER(
    FILTRE(
        _names;
        _hasDupplicateLetters
    )
))
Excel solution 25 for Match Names with Same Initials, proposed by LUIS FLORENTINO COUTO CORTEGOSO:
=LET(m,
    MAP(
        A2:A20,
        LAMBDA(
            x,
            CONCAT(
                REGEXEXTRACT(
                    x,
                    "^([A-Z]).*([A-Z]).*$",
                    2
                )
            )
        )
    ),
    SORT(FILTER(A2:A20,
    MAP(m,
    LAMBDA(y,
    SUM(--(y=m))))-1)))
Excel solution 26 for Match Names with Same Initials, proposed by Md Ismail Hosen:
=LAMBDA(names,LET(_FirstNameFirstChar,LEFT(names,1),_LastNameFirstChar,MAP(names,LAMBDA(a,LEFT(TAKE(TEXTSPLIT(a," "),,-1),1))),_Mask,BYROW(HSTACK(_FirstNameFirstChar,_LastNameFirstChar),LAMBDA(row,SUM(--BYROW(row=HSTACK(_FirstNameFirstChar,_LastNameFirstChar),AND))>1)),_Result,FILTER(names,_Mask),_Result))(A2:A20)
Excel solution 27 for Match Names with Same Initials, proposed by Songglod P.:
=LET(n,A2:A20,a,MAP(n,LAMBDA(x,LEFT(x)&LEFT(TEXTAFTER(x," ",-1)))),SORT(FILTER(n,MAP(a,LAMBDA(x,SUM(N(x=a))))>1)))
Excel solution 28 for Match Names with Same Initials, proposed by Ben Warshaw:
=LET(
 _Names, $A$2:$A$20,
 _Step1, MAP(_Names, LAMBDA(x, LEFT(x, 1) & LEFT(TEXTAFTER(x, " ", -1), 1))),
 _Step2, MAP(_Step1, LAMBDA(x, ROWS(FILTER(_Step1, _Step1 = x)) > 1)),
 _Result, LET(a, IF(_Step2, _Names), FILTER(a, a <> FALSE)),
 _Result
)
Excel solution 29 for Match Names with Same Initials, proposed by Gabriel Pugliese:
=LET(m,
    MAP(
        A2:A20,
        LAMBDA(
            w,
            
            LET(
                a,
                CONCAT(
                    LEFT(
                        TEXTSPLIT(
                            w,
                            " "
                        )
                    )
                ),
                LEFT(
                    a
                )&RIGHT(
                    a
                )
            )
        )
    ),
    
i,
    SCAN(0,
    m,
    LAMBDA(a,
    v,
    SUM(--(v=m)))),
    
SORT(FILTER(A2:A20,
    (i>1))))
Excel solution 30 for Match Names with Same Initials, proposed by Moshe Moses, FCCA:
=LET(rng,A2:A20,LEFT(TEXTBEFORE(rng," ",1),1)&LEFT(TEXTAFTER(rng," ",-1),1))
=SORT(FILTER(A2:A20,COUNTIF($B$2#,B2#)>1))

Solving the challenge of Match Names with Same Initials with Python

Python solution 1 for Match Names with Same Initials, proposed by Konrad Gryczan, PhD:
import pandas as pd
import re
input = pd.read_excel(path, usecols="A", nrows=20)
test = pd.read_excel(path, usecols="B", nrows=5)
extract_initials = lambda name: ''.join(re.findall(r'[A-Z]', name)[:1] + re.findall(r'[A-Z]', name)[-1:])
result = input.assign(initials=input['Names']
 .apply(extract_initials))
 .groupby('initials')
 .filter(lambda x: len(x) > 1)
 .sort_values(by='Names').reset_index()
print(result['Names'].equals(test['Answer Expected'])) # True
                    
                  
Python solution 2 for Match Names with Same Initials, proposed by Abdallah Ally:
import pandas as pd
def get_initials(text):
 split = text.split()
 initials = split[0][0] + split[-1][0]
 return initials
df = pd.read_excel(file_path, usecols='A')
# Perform data manipulation
initials = [get_initials(x) for x in df.Names]
df = df[df['Names'].map(lambda x: initials.count(get_initials(x)) > 1)]
df = df.sort_values(by='Names', ignore_index=True)
df
                    
                  

Solving the challenge of Match Names with Same Initials with Python in Excel

Python in Excel solution 1 for Match Names with Same Initials, proposed by Alejandro Campos:
import re
df = pd.DataFrame({"Names": [name.strip() for name in xl("A2:A20")[0]]})
df_result = (df.assign(init=df['Names'].apply(lambda n: ''
 .join(re.findall(r'[A-Z]', n)[::len(re.findall(r'[A-Z]', n))-1])))
 .groupby('init').filter(lambda x: len(x) > 1)
 .sort_values('Names').reset_index(drop=True)).drop(columns='init')
df_result
                    
                  
Python in Excel solution 2 for Match Names with Same Initials, proposed by Aditya Kumar Darak 🇮🇳:
data = xl("A1:A20", headers=True)
data["H"] = [i[0] + i.split()[-1][0] for i in data["Names"]]
result = data[data["H"].isin(data[data["H"].duplicated()]["H"])].reset_index(drop=True)
result = result.drop(columns="H")
result
                    
                  
Python in Excel solution 3 for Match Names with Same Initials, proposed by Anshu Bantra:
def get_initials(name):
 initials = ''.join([part[0].upper() for part in name.split()])
 return ''.join([initials[0]+initials[-1]])
df = xl("A1:A20", headers=True)
df['Initials'] = df['Names'].apply(get_initials)
initial_counts = df['Initials'].value_counts()
df['Is_Duplicate'] = df['Initials'].map(lambda x: initial_counts[x] > 1)
df[df['Is_Duplicate']].sort_values('Names').reset_index(drop=True['Names']
                    
                  
Python in Excel solution 4 for Match Names with Same Initials, proposed by Ümit Barış Köse, MSc:
data = xl("A1:A20", headers=True)
data["G"] = data["Names"].apply(lambda i: i[0&] + i.split()[-1][0])
result = data.sort_values(by="Names") 
result = result[result["G"].duplicated(keep=False)] 
result = result.drop(columns="G").reset_index(drop=True) 
                    
                  

Solving the challenge of Match Names with Same Initials with R

R solution 1 for Match Names with Same Initials, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
input = read_excel(path, range = "A1:A20")
test = read_excel(path, range = "B1:B6")
result = input %>%
 mutate(initials = str_extract_all(Names, "[A-Z]") %>% 
 map_chr(~ paste0(.[1], .[length(.)]))) %>%
 filter(n() > 1, .by = initials) %>%
 select(Names) %>%
 arrange(Names)
all.equal(result$Names, test$`Answer Expected`)
# [1] TRUE
                    
                  

&

Leave a Reply