使用Pandas DataFrame计算日期差、最大最小日期及日期计数
患者治疗记录统计解决方案
你可以直接用pandas的groupby.agg()方法一次性完成所有需求,不需要手动遍历分组,代码更简洁高效:
import pandas as pd # 你已有的预处理逻辑 df = Patient_Dates df['Dates'] = pd.to_datetime(df['Dates']) # 单语句完成三个需求的聚合计算 stat_result = df.groupby('Patient_ID', as_index=False)['Dates'].agg( 总治疗时长_天 = lambda x: (x.max() - x.min()).days, 最小治疗日期 = 'min', 最大治疗日期 = 'max', 治疗总次数 = 'count' ) # 若需要导出结果到本地可执行以下代码 # stat_result.to_csv('患者治疗统计结果.csv', index=False, encoding='utf-8-sig')
输出的stat_result数据表每列对应你的需求:
- 总治疗时长_天:对应A需求,直接返回整数天数,无需额外处理timedelta格式
- 最小治疗日期、最大治疗日期:对应B需求
- 治疗总次数:对应C需求
如果你想基于你现有循环代码修改,调整后的写法如下:
df=Patient_Dates df['Dates'] = pd.to_datetime(df['Dates']) grouped = df.groupby(['Patient_ID']) op = [] for Name, group in grouped: min_date = group['Dates'].min() max_date = group['Dates'].max() LengthOfTreatment_days = (max_date - min_date).days treat_cnt = group['Dates'].count() op.append([Name, LengthOfTreatment_days, min_date, max_date, treat_cnt]) # 可转为带表头的DataFrame方便使用 result_df = pd.DataFrame(op, columns=['Patient_ID', '总治疗时长_天', '最小治疗日期', '最大治疗日期', '治疗总次数'])
内容的提问来源于stack exchange,提问作者Leonardo
相关产品推荐
相关产品推荐

