You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于条件合并求和Pandas DataFrame指定行技术问询

解决方案:仅合并指定行求和

你遇到的问题很典型——直接用groupby(['jb_name'])会把所有相同名称的行都合并,但你只需要针对jb_name为generic的行做求和合并,其他行保持原样。这里有两种简洁的实现方式:

方法一:拆分处理后合并

这种方式逻辑直观,把数据分成两部分分别处理再合并:

import pandas as pd

# 示例数据
data = {
    'jb_name': ['generic', 'generic1', 'generic', 'other'],
    'jb_count': [10, 2, 15, 14]
}
df = pd.DataFrame(data)

# 1. 保留所有非generic的行,不做任何处理
non_generic_rows = df[df['jb_name'] != 'generic']

# 2. 计算generic行的总和,生成单行数据
generic_total = df[df['jb_name'] == 'generic'].agg(
    {'jb_name': lambda x: 'generic', 'jb_count': 'sum'}
).to_frame().T

# 3. 合并两部分数据并重置索引
final_df = pd.concat([non_generic_rows, generic_total], ignore_index=True)

print(final_df)

运行后输出正好符合你的预期:

jb_name jb_count
0  generic1        2
1     other       14
2   generic       25

方法二:自定义分组键

如果喜欢用groupby的方式,可以通过自定义分组键来实现精准合并:

# 给每行分配分组键:generic行归为同一组,其他行各自为一组
df['group_key'] = df['jb_name'].apply(lambda x: x if x != 'generic' else 'temp_generic')

# 按分组键求和,再还原jb_name列
final_df = df.groupby('group_key')['jb_count'].sum().reset_index()
final_df['jb_name'] = final_df['group_key'].replace('temp_generic', 'generic')
final_df = final_df.drop('group_key', axis=1)

print(final_df)

这个方法同样能得到你想要的结果,而且代码更紧凑。

两种方法的核心思路都是只对目标行做聚合,其他行完全保留原始状态,避免了全量groupby带来的不必要合并。

内容的提问来源于stack exchange,提问作者Mahesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 11:18:12