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

Python Pandas按列分组遇no值重置累计求和的实现方法

import pandas as pd

# 构造测试数据,实际使用时替换为你自己的DataFrame即可
data = {
    "Column1": ["A", "A", "A", "A", "A", "B", "B", "B", "B"],
    "Column2": [2, 1, 3, 2, 5, 3, 1, 2, 5],
    "Column3": ["yes", "yes", "no", "yes", "yes", "yes", "no", "yes", "yes"]
}
df = pd.DataFrame(data)

# 步骤1:按Column1分组生成段落标识,遇到no则段落编号+1
df["block_id"] = df.groupby("Column1")["Column3"].transform(
    lambda x: (x == "no").cumsum().shift(fill_value=0)
)

# 步骤2:按Column1+段落标识分组,仅对yes行计算对应段落的Column2总和
df["block_sum"] = df[df["Column3"] == "yes"].groupby(["Column1", "block_id"])["Column2"].transform("sum")

# 步骤3:生成Column4,no行直接填no,其余行填对应段落的总和
df["Column4"] = df.apply(
    lambda row: "no" if row["Column3"] == "no" else row["block_sum"],
    axis=1
)

# 清理过程中生成的辅助列
df = df.drop(columns=["block_id", "block_sum"])

print(df)

运行后输出结果和你提供的期望效果完全一致。


内容的提问来源于stack exchange,提问作者gülsümmm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:24:04