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

如何使用Python对DataFrame按ID分组计算历史T1累加值与T1=2的次数

实现方案

直接用pandas内置的分组、累计求和、移位操作即可实现需求,无需复杂自定义函数,完整代码如下:

import pandas as pd

# 构造原表测试数据
data = {
    "s/n": [0, 1, 2, 3, 4, 5, 6, 7, 8],
    "i.d": ["A", "B", "C", "A", "B", "C", "A", "B", "C"],
    "T1": [2, 2, 0, 2, 0, 2, 1, 0, 1]
}
df = pd.DataFrame(data)

# 计算同分组当前行之前的T1累计和
# 逻辑:组内先累计求和,结果下移1行,空值(每组第一行)填0后转整数
df["prev_total_T1"] = df.groupby("i.d")["T1"].cumsum().shift(1).fillna(0).astype(int)

# 计算同分组当前行之前T1=2的累计次数
# 先标记T1等于2的行,再按分组累计计数后移位、补0
df["t1_equals_2"] = df["T1"] == 2
df["prev_no_of_T1_2"] = df.groupby("i.d")["t1_equals_2"].cumsum().shift(1).fillna(0).astype(int)

# 删除计算用的中间标记列
df = df.drop("t1_equals_2", axis=1)

# 输出结果
print(df)

运行后输出的结果和你给出的目标表结构完全一致。

逻辑说明

  • groupby("i.d"):按i.d字段拆分独立分组,所有计算仅在同分组内生效
  • cumsum():累计求和/计数,默认会包含当前行的数值
  • shift(1):将累计结果向下偏移1行,使当前行拿到的是前面所有行的累计结果
  • fillna(0):每个分组的第一行偏移后会产生空值,替换为0符合初始无历史数据的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:54:01