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

如何按条件逐行统计分组内负责人ID的累计变更次数

分组内负责人累计变更次数统计实现

需求说明

现有包含group(分组)、date(月份)、ID(负责人ID)的时间序列数据,需统计每个分组内负责人的累计变更次数,生成包含id_changes列的结果:当前行之前(含当前行)发生的负责人变更总次数,初始行变更次数为0。

输入数据

group   date     ID
A      Jan-22    1
A      Feb-22    1
A      Mar-22    1
A      Apr-22    2
A      May-22    3
A      Jun-22    4
B      Mar-23    6
B      Apr-23    6
B      May-23    3
B      Jun-23    3
C      Sep-21    1
C      Oct-21    1
C      Nov-21    4
C      Dec-21    4
C      Jan-22    4

期望输出

group   date     ID    id_changes
A      Jan-22    1         0
A      Feb-22    1         0
A      Mar-22    1         0
A      Apr-22    2         1
A      May-22    3         2
A      Jun-22    4         3
B      Mar-23    6         0
B      Apr-23    6         0
B      May-23    3         1
B      Jun-23    3         1
C      Sep-21    1         0
C      Oct-21    1         0
C      Nov-21    4         1
C      Dec-21    4         1
C      Jan-22    4         1

实现方案(Python Pandas)

以下是基于Pandas的高效实现步骤:

代码示例

import pandas as pd

# 加载输入数据(可替换为从文件读取,如pd.read_csv/Excel)
data = pd.DataFrame({
    'group': ['A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C'],
    'date': ['Jan-22', 'Feb-22', 'Mar-22', 'Apr-22', 'May-22', 'Jun-22', 'Mar-23', 'Apr-23', 'May-23', 'Jun-23', 'Sep-21', 'Oct-21', 'Nov-21', 'Dec-21', 'Jan-22'],
    'ID': [1, 1, 1, 2, 3, 4, 6, 6, 3, 3, 1, 1, 4, 4, 4]
})

# 按分组统计累计变更次数
data['id_changes'] = data.groupby('group')['ID'].apply(
    lambda x: (x != x.shift()).cumsum() - 1
)

# 输出格式化结果
print(data.to_string(index=False))

代码解释

  • groupby('group'):按分组维度独立处理,避免跨分组统计变更
  • x != x.shift():对比当前行与上一行的ID,返回布尔值(True表示发生变更)
  • .cumsum():对变更标记做累计求和,此时初始行返回NaN,后续变更行累计值从1开始
  • - 1:将累计值减1,使初始行变更次数为0,后续行对应实际累计变更次数

运行代码后即可得到与期望输出完全一致的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:42:34