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

Pandas按三列分类分组条件填充第四列的实现方法

实现方案

核心逻辑是把条件判断转换为累计求和的计算项,用pandas原生向量化运算即可实现,不需要写自定义循环:

  1. 先修正一个描述笔误:从示例数据和计算规则看,判断是否扣减的字段是C列(取值为YES/NO),不是B列,B列存储的是实际扣减数值。
  2. 构造扣减项列:当C列值为NO时,扣减项等于当前行B列的值,否则扣减项为0
  3. 按A列分组,对扣减项做分组累计求和
  4. 用每组初始值400减去累计扣减额,就得到最终D列的值

代码实现

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'A': [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3],
    'B': [5]*15,
    'C': ['YES','YES','NO','NO','NO','NO','YES','YES','NO','YES','NO','NO','NO','NO','YES']
})

# 按规则计算D列
df['D'] = 400 - df.assign(
    deduct = df['B'].where(df['C'].eq('NO'), 0)
).groupby('A')['deduct'].cumsum()

运行后生成的D列和给出的示例结果完全一致。

逻辑验证

以A=2的分组为例:

  • 第6行C=NO,扣减5,累计扣减5 → 400-5=395
  • 第7、8行C=YES,扣减0,累计扣减保持5 → D值保持395
  • 第9行C=NO,扣减5,累计扣减10 → 400-10=390
  • 第10行C=YES,扣减0,累计扣减10 → D值保持390
    完全匹配给出的逐行计算规则。

如果实际场景中确实是判断B列值为NO、用C列值做扣减,只需要把代码里判断列、取值列对应替换即可,核心逻辑通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 18:48:41