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

Python中如何按分组执行递归计算并应用于pandas DataFrame

解决pandas分组逐行迭代计算需求

实现思路

你需要的是分组内依赖前序计算结果的迭代运算,直接使用groupby.apply配合自定义迭代函数即可实现,不需要写多层循环。
要注意先对每个分组按年份升序排序,避免原始数据顺序混乱导致计算错误。


完整实现代码

1. 导入依赖并构造示例数据

import pandas as pd

# 注意pandas的DataFrame首字母需要大写,修正原示例的拼写错误
df = pd.DataFrame({
    'Product ID':['A','A','A','A','B','B','C'],
    'Year':[1,2,3,4,1,2,1],
    'Cumulative Profit':[10,8,12,18,-5,10,2],
    'Desired output':[10,0,2,6,0,10,2]
})

2. 定义分组内计算函数

def calc_value(group):
    # 先按年份排序保证时序正确
    group = group.sort_values('Year').reset_index(drop=True)
    value_list = []
    sum_prev_value = 0
    for idx, row in group.iterrows():
        if idx == 0:
            current_val = max(row['Cumulative Profit'], 0)
        else:
            current_val = max(0, row['Cumulative Profit'] - sum_prev_value)
        value_list.append(current_val)
        sum_prev_value += current_val
    group['value'] = value_list
    return group

3. 分组应用函数得到结果

result = df.groupby('Product ID', group_keys=False).apply(calc_value)
print(result)

结果验证

运行后得到的value列和你给出的Desired output完全一致:

Product IDYearCumulative ProfitDesired outputvalue
A1101010
A2800
A31222
A41866
B1-500
B2101010
C1222

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:54:08