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

如何在Pandas中合并age=14与15的行并求和,保留为age=14?

问题解决:合并指定age行并求和

原始数据

import pandas as pd

data = {'age' :[10,11,12,11,11,10,11,13,13,13,14,14,15,15,15],
        'num1':[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24],
        'num2':[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34]}
df = pd.DataFrame(data)

需求说明

  • 将age为14和15的行的num1、num2列分别求和
  • 求和结果作为age=14的一行保留
  • 其余行保持不变

错误尝试代码

用户原代码存在语法与逻辑错误,无法实现需求:

df1 =df.groupby(age[age >=14])['num1', 'num2'].apply(', '.join).reset_index(drop=True).to_frame()

正确实现方法

方法一:拆分-聚合-拼接

逻辑清晰,适合新手理解:

# 1. 保留age不为14、15的原始行
non_target_rows = df[~df['age'].isin([14, 15])]

# 2. 对age为14、15的行求和,设置age固定为14
target_sum = df[df['age'].isin([14, 15])].agg({
    'age': lambda x: 14,
    'num1': 'sum',
    'num2': 'sum'
}).to_frame().T

# 3. 拼接两部分数据,重置索引并修改列名
final_result = pd.concat([non_target_rows, target_sum], ignore_index=True)
final_result = final_result.rename(columns={'num1': 'time1', 'num2': 'time2'})

print(final_result)

方法二:自定义分组键聚合

通过分组键将14和15归为一组,一次性完成处理:

# 构造分组键:把age=15替换为14,其他age保持不变
group_key = df['age'].replace(15, 14)

# 分组处理:14组求和,其他组保留原行
final_result = df.groupby(group_key, group_keys=False).apply(
    lambda group: group[['num1', 'num2']].sum().to_frame().T.assign(age=14)
    if group['age'].iloc[0] == 14
    else group
).reset_index(drop=True)

# 修改列名匹配需求
final_result = final_result.rename(columns={'num1': 'time1', 'num2': 'time2'})

print(final_result)

最终输出

两种方法都会得到符合需求的结果:

age time1 time2
0    10    10    20
1    11    11    21
2    12    12    22
3    11    13    23
4    11    14    24
5    10    15    25
6    11    16    26
7    13    17    27
8    13    18    28
9    13    19    29
10   14   110   160

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:20:33