根据 if 条件合并和求和两个 pandas 行
Posted
技术标签:
【中文标题】根据 if 条件合并和求和两个 pandas 行【英文标题】:Merge and sum two pandas rows based on if condition 【发布时间】:2020-10-19 10:30:13 【问题描述】:我有一个巨大的数据框,我想merge only two rows in it based on if condition
。下面是一个示例数据框,当我尝试执行 groupby sum
时,其他行也会受到影响。
我只希望列jb_name
和generic
得到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
【问题讨论】:
【参考方案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...对于给您带来的不便,我深表歉意以上是关于根据 if 条件合并和求和两个 pandas 行的主要内容,如果未能解决你的问题,请参考以下文章
Pandas Dataframe 合并 2 列,包括条件 If 合并:如果 df_2 中的日期在 df_1 中的其他两个日期之间