【问题标题】:Combining rows in pandas DataFrame by comparing multiple columns通过比较多列来组合pandas DataFrame中的行
【发布时间】:2017-10-12 09:15:20
【问题描述】:

如何从以下 DataFrame 中获得预期结果

 df
            col_1             col_2    col_3     col_4  
     0  Non-Saved    www.google.com     POST    20,567
     1               www.google.com     POST
     2             www.facebook.com      GET   
     3             www.facebook.com    OTHER
     4             www.linkedin.com      GET
     5      Saved     www.Quora.com     POST     6,337
     6                www.gmail.com     POST 
     7                www.gmail.com      GET

预期结果:

            col_1             col_2    col_3     col_4  
     0  Non-Saved    www.google.com     POST    20,567
                   www.facebook.com      GET   
                   www.linkedin.com    OTHER
     1      Saved     www.Quora.com     POST     6,337
                      www.gmail.com      GET

通过合并 col_1 和 col_3 中的空字符串,从 8 行变为 2 行。此外,将 col_2 和 col_3 中的不同值连接到一个单元格中。谁能帮我用一个用户定义的函数来做到这一点?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    如果是之前的solution worked,那我们试试这个:

    l = lambda x: ' , '.join(x.unique())
    
    df = df.apply(lambda x: x.str.strip()).replace('',np.nan)
    
    print(df.groupby(df.col_1.ffill())\
      .agg({'col_2': l,'col_3': l, 'col_4':'first'})\
      .reset_index())
    

    输出:

           col_1                                              col_2  \
    0  Non-Saved  www.google.com , www.facebook.com , www.linked...   
    1      Saved                      www.Quora.com , www.gmail.com   
    
                    col_3   col_4  
    0  POST , GET , OTHER  20,567  
    1          POST , GET   6,337  
    

    【讨论】:

    • 对您的答案稍作修改,因为 col_2 和 col_3 都需要是唯一值。请查阅。谢谢!
    • @Rooney,你明白了。刚刚修改了输出以匹配您的解决方案。
    猜你喜欢
    • 2023-01-11
    • 2020-09-01
    • 2018-03-23
    • 2021-10-19
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 2016-05-01
    • 2021-12-06
    相关资源
    最近更新 更多