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

Pandas分组构建序列:按固定值重置后汇总表异常求助

问题解决:按'000'重置患者序列分组并统计

你的核心问题是没给同一患者内被'000'分隔的子序列单独分组,导致所有pattern被合并成了一组。下面是调整后的代码,能实现按'000'重置分组,然后统计每个子序列的pattern组合及对应的患者数:

import pandas as pd

df2 = pd.DataFrame({
    'patient': ['one', 'one', 'one', 'one','one', 'one','one','one','one','one','one','one'],    
    'pattern': ['A', 'B', '000', 'B', 'B', '000','D','A','C','000','A','B'],
    'date': ['11/1/2022', '11/2/2022', '11/3/2022', '11/4/2022', '11/5/2022', '11/6/2022','11/7/2022', '11/8/2022', '11/9/2022','11/10/2022', '11/11/2022','11/12/2022']
})

# 1. 给每个患者内的子序列生成分组标识:遇到'000'就重置分组
df2['group_id'] = df2.groupby('patient')['pattern'].apply(lambda x: (x == '000').cumsum())

# 2. 过滤掉'000'的行,按患者+分组id分组,拼接pattern并统计患者数
grouped = (df2[df2['pattern'] != '000']
           .sort_values(['patient', 'date'])
           .groupby(['patient', 'group_id'])
           .agg(pattern=('pattern', ','.join),
                patients=('patient', 'nunique')))

# 3. 按pattern汇总患者数总和
out = grouped.groupby('pattern')['patients'].sum().reset_index()

print(out)

输出结果:

pattern  patients
0      A,B         2
1      B,B         1
2    D,A,C         1

完全匹配你期望的desired DataFrame。

关键步骤说明:

  • group_id的生成:通过groupby('patient')后对pattern列统计'000'的累积次数,同一患者内每出现一次'000',后续行的group_id就加1,实现子序列的分组重置。
  • 后续先按patient+group_id分组,这样每个被'000'分隔的子序列会被单独处理,拼接出对应的pattern字符串。
  • 最后按pattern汇总,统计有多少个患者(或患者内的子序列)对应这个pattern组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:00:56