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

如何基于Pandas分组序列处理结果生成指定汇总数据集?

问题

现有经过以下Pandas代码处理后的DataFrame df2:

import pandas as pd
df2 = pd.DataFrame({'patient': ['one', 'one', 'one', 'three','three', 'two','two','two','two'],    
                    'pattern': ['A', 'B', '000', 'C', 'A', '000','D','A','C'],        
                    'date': ['11/20/2022', '11/22/2022', '11/23/2022', '11/8/2022', '11/9/2022', '11/14/2022','11/20/2022', '11/22/2022', '11/23/2022']})

m = df2['pattern'] == '000'
df2['result'] = (df2[~m].groupby(['patient', m.cumsum()])
                        .cumcount().add(1)
                        .reindex(df2.index, fill_value=0))

需要从处理后的df2中提取符合如下格式的汇总数据集:

required_dataset = pd.DataFrame({'pattern': ['A,B', 'C,A','D,A,C'],   # Pattern按日期排序
                    'patients': [1,1,1]})                             # 唯一患者总数

请实现该数据提取方法。

解决方案

可以通过以下步骤实现需求:

  1. 统一日期格式:将date列转换为datetime类型,确保后续排序逻辑准确。
  2. 生成序列分组标识:基于原代码的result列,为每个患者的独立序列段生成唯一分组ID。
  3. 过滤无效行并排序:剔除pattern为000的分隔行,按患者和日期排序保证序列顺序正确。
  4. 拼接序列并统计患者数:对每个分组的pattern进行拼接,再按拼接结果统计对应的唯一患者数量。

具体代码如下:

# 转换date列为日期格式
df2['date'] = pd.to_datetime(df2['date'])

# 为每个患者的独立序列段生成分组ID
df2['group_id'] = df2.groupby('patient')['result'].transform(lambda x: x.eq(0).cumsum())

# 执行分组拼接与统计
result_df = (df2[df2['pattern'] != '000']
             .sort_values(['patient', 'date'])
             .groupby(['patient', 'group_id'])
             .agg(pattern=('pattern', ','.join))
             .reset_index()
             .groupby('pattern')
             .agg(patients=('patient', 'nunique'))
             .reset_index())

print(result_df)

运行后输出结果:

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

该结果完全匹配需求中的required_dataset格式。

内容的提问来源于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 22:45:38