【问题标题】:Merge and sum two pandas rows based on if condition根据 if 条件合并和求和两个 pandas 行
【发布时间】:2020-10-19 10:30:13
【问题描述】:

我有一个巨大的数据框,我想merge only two rows in it based on if condition。下面是一个示例数据框,当我尝试执行 groupby sum 时,其他行也会受到影响。

我只希望列jb_namegeneric 得到merged and sum

    jb_name   jb_count
0   generic    10
1   generic1    2
2   generic    15
3   other      14

尝试了以下方法,但正如我所说,它也会影响其他行

df = df.groupby(['jb_name'])['jb_count'].sum().reset_index()

我想要最终的df如下

    jb_name   jb_count
0   generic    25
1   generic1    2
3   other      14

【问题讨论】:

    标签: python pandas dataframe merge


    【解决方案1】:

    或者,我们可以将索引设置为jb_name,并在level 0 上使用sum,其中索引为generic

    df = df.set_index('jb_name')
    mask = (df.index == 'generic')
    df1 = pd.concat([df[mask].sum(level=0), df[~mask]]).reset_index()
    

    结果:

    # print(df1)
    
        jb_name  jb_count
    0   generic        25
    1  generic1         2
    2     other        14
    

    【讨论】:

    • 我也想要其他行......我的不好,我让它有点不清楚
    • 请用您的预期输出编辑问题..
    • 谢谢shubham...我已经更新了...你能再检查一下吗
    【解决方案2】:
    #Bollean select, droupby as you sum the duplicated and append tthe no duplicates
    
    m=df.jb_name=='generic'
    df[m].groupby(by='jb_name', axis=0).sum().reset_index().append(df[~m])
    
    
    
    jb_name  jb_count
    0   generic        25
    1  generic1         2
    3     other        14
    

    【讨论】:

      【解决方案3】:

      用途:

      mask = df['jb_name'] == 'generic'
      df = df[mask].groupby('jb_name', as_index=False).sum().append(df[~mask], ignore_index=True)
      

      【讨论】:

      • 我已经更新了我想要的最终 df...对于给您带来的不便,我深表歉意
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 2021-10-31
      相关资源
      最近更新 更多