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

Pandas DataFrame特定行数值合并:负年龄行bal值累加至同队列零年龄行

嘿,我来帮你搞定这个Pandas的需求!先给你整个示例场景,咱们一步步来操作,保证清晰易懂~

先看示例数据

假设我们的原始DataFrame长这样:

import pandas as pd

df = pd.DataFrame({
    'cohort': ['A', 'A', 'A', 'B', 'B', 'B'],
    'age': [-1, 0, 2, -2, 0, 3],
    'bal': [100, 500, 300, 200, 600, 400]
})

这里每个队列(cohort)里有负年龄的行、年龄为0的行,还有正年龄的行,我们要把同队列里负年龄行的余额,全加到年龄为0的行的余额上,最后去掉负年龄的行。

具体操作步骤

1. 计算每个队列的负年龄余额总和

先把每个队列里所有age < 0的行的bal加总,得到每个队列对应的累计值:

# 筛选出age<0的行,按cohort分组求和
neg_bal_sum = df[df['age'] < 0].groupby('cohort')['bal'].sum()

这时候neg_bal_sum是一个Series,索引是cohort,值就是对应队列的负年龄余额总和,比如队列A是100,队列B是200。

2. 把累计值关联到原DataFrame

给原DataFrame加一列,让每一行都能拿到自己所属队列的负年龄余额总和,没有的话填0:

# 用map匹配cohort对应的总和,fillna处理没有负年龄的队列
df['neg_bal_total'] = df['cohort'].map(neg_bal_sum).fillna(0)

3. 更新年龄为0的行的余额

对age == 0的行,把它的bal加上对应的负年龄余额总和;其他行的余额保持不变:

# 用apply逐行判断更新
df['bal'] = df.apply(
    lambda row: row['bal'] + row['neg_bal_total'] if row['age'] == 0 else row['bal'],
    axis=1
)

4. 整理最终结果

过滤掉所有age < 0的行,删掉我们临时加的辅助列,再重置索引:

# 过滤+删列+重置索引
result_df = df[df['age'] >= 0].drop('neg_bal_total', axis=1).reset_index(drop=True)
最终结果

运行完上面的代码,result_df就是我们要的样式:

cohort  age  bal
0      A    0  600
1      A    2  300
2      B    0  800
3      B    3  400

如果你的原始数据里同一个队列有多个age=0的行,这个方法会给每个age=0的行都加上负年龄余额总和;要是你需要把总和合并到某一个age=0的行里,可以再调整分组逻辑,比如先按cohort和age分组求和,再处理就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:09:14