【问题标题】:How can I Merge rows by some value in a column in pandas on specific condition?如何在特定条件下按熊猫列中的某个值合并行?
【发布时间】:2022-09-23 21:19:28
【问题描述】:

我需要 pandas 的帮助来根据特定条件对行进行分组。我有一个数据集如下:

    Name    Source  Country     Severity

    ABC     XYZ     USA         Low     
    DEF     XYZ     England     High        
    ABC     XYZ     India       Medium   
    EFG     XYZ     Algeria     High   
    DEF     XYZ     UK          Medium  
    

我想根据姓名字段的方式是 Country 应附加在列中的行中,并且严重性是根据其最高优先级设置的。

之后输出表如下所示:

    Name    Source  Country      Severity

    ABC     XYZ     USA, India   Medium     
    DEF     XYZ     England, UK  High        
    EFG     XYZ     Algeria      High 

我可以使用以下代码聚合前 3 列,但无法获得合并严重性的解决方案。

df = df.groupby(\'Name\').agg({\'source\':\'first\', \'Country\': \', \'.join })

    标签: python pandas dataframe group-by


    【解决方案1】:

    您应该将您的严重性转换为有序的Categorical

    这使您可以使用简单的max

    df['Severity'] = pd.Categorical(df['Severity'],
                                    categories=['Low', 'Medium', 'High'],
                                    ordered=True)
    
    out = (df
     .groupby('Name')
     .agg({'Source':'first',
           'Country': ', '.join,
           'Severity': 'max'})
    )
    

    输出:

         Source      Country Severity
    Name                             
    ABC     XYZ   USA, India   Medium
    DEF     XYZ  England, UK     High
    EFG     XYZ      Algeria     High
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      • 2020-04-24
      • 1970-01-01
      相关资源
      最近更新 更多