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

pandas dataframe如何按ID统计截止当前时间符合指定条件的累计次数

实现方案

前提:已提前确认DataFrame按CLIENT_ID、ENCOUNTER_DATE升序排序完成。

核心代码如下:

import pandas as pd

# 原有数据初始化代码
df = pd.DataFrame({"CLIENT_ID": [8222, 8222, 8222, 8222, 8300, 8300, 8300, 8300, 8300, 8400, 8401, 8401, 8500],
                   "ENCOUNTER_DATE": ['2020-01-01', '2020-03-02', '2020-04-18', '2020-07-31', '2017-06-10', '2017-09-11', '2018-02-01', '2018-04-01', '2018-05-31', '2020-12-31', '2017-08-29', '2017-09-15', '2018-10-10'],
                   "CONDITION": ["positive", "treated", "treated", "negative", "negative", "treated", "future treatment", "treated", "negative", "future treatment", "negative", "positive", "positive"]})
manage_condition_list = ['positive','treated','future treatment']

# 核心统计逻辑
df['CONDITION_COUNTS'] = df['CONDITION'].isin(manage_condition_list).groupby(df['CLIENT_ID']).cumsum()

逻辑说明

  • df['CONDITION'].isin(manage_condition_list)会返回布尔值序列,符合统计条件的行对应True(数值等价于1),不符合的对应False(数值等价于0)
  • 按CLIENT_ID分组后执行累加函数cumsum(),天然符合需求:符合条件则计数+1,不符合则计数与上一行一致,同时实现了不同客户的计数隔离
  • 该逻辑为pandas向量化运算,生产环境下面对海量数据也能高效执行,不需要循环遍历行。

注意事项

如果后续需要重新排序数据,一定要先将ENCOUNTER_DATE转换为datetime类型再排序,避免字符串格式的日期排序出错,转换代码参考:

df['ENCOUNTER_DATE'] = pd.to_datetime(df['ENCOUNTER_DATE'])
df = df.sort_values(by=['CLIENT_ID', 'ENCOUNTER_DATE'], ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:18:03