代码之家  ›  专栏  ›  技术社区  ›  Rahul Agarwal

基于多个列合并行并联接多个列

  •  2
  • Rahul Agarwal  · 技术社区  · 6 年前

    我有一个像df的

    Code  Country     CID      New_Country
    123   Aus         C11      Europe
    123   Aus         C12      India
    456   Europe      C98      US
    456   Europe      C123     US
    456   Europe      C43      Europe
    112   US          C345     China
    

    我想要这样的结果df:

    Code  Country     Merged_Column             
    123   Aus         C11,Europe;C12,India          
    456   Europe      C98,US;C123,US;C43,Europe
    112   US          C345,China
    

    问题陈述

    我想合并基于多个列的行( Code Country )想合并两列( CID New_Country )

    我的代码:

    df=df.groupby(['Code','Country'])['CID'].apply(', '.join).reset_index()
    

    上面的代码适用于一列,但是需要帮助合并两列,如结果df所示

    1 回复  |  直到 6 年前
        1
  •  2
  •   anky    6 年前

    您可以使用:

    series.str.cat 浓缩2毫升然后 assign + groupby()

    df.assign(Merged_Column=df['CID'].str.cat(df['Country'],sep=',')).groupby(
       ['Code','Country'],sort=False,as_index=False)['Merged_Column'].agg(';'.join)
    

    或: df.agg() 具有 .join axis=1 对于具有上述相同步骤的多个col

    df.assign(Merged_Column=df[['CID','New_Country']].agg(','.join,1)).groupby(
         ['Code','Country'],sort=False,as_index=False)['Merged_Column'].agg(';'.join)
    

       Code Country              Merged_Column
    0   123     Aus       C11,Europe;C12,India
    1   456  Europe  C98,US;C123,US;C43,Europe
    2   112      US                 C345,China