在R语言中基于日期范围聚合amount列的实现方案
解决方案
前提说明
假设df2中的id字段与df1中的patient_id为同一患者标识(若实际对应关系不同,可调整merge时的关联字段)。同时确保所有日期字段为datetime类型,若不是,先执行类型转换:
import pandas as pd # 转换日期字段为datetime类型 df1['date_of_admission'] = pd.to_datetime(df1['date_of_admission']) df2['date_of_admission'] = pd.to_datetime(df2['date_of_admission']) df2['date_of_discharge'] = pd.to_datetime(df2['date_of_discharge'])
步骤实现
关联两个数据框
通过患者ID将df1和df2合并,保留所有需要的字段:merged_df = df1.merge(df2, left_on='patient_id', right_on='id', suffixes=('_df1', '_df2'))筛选符合日期区间的记录
提取df1中入院日期落在对应患者df2入院-出院区间内的记录:filtered_df = merged_df[ (merged_df['date_of_admission_df1'] >= merged_df['date_of_admission_df2']) & (merged_df['date_of_admission_df1'] <= merged_df['date_of_discharge']) ]按患者分组求和
对每个唯一的patient_id,汇总符合条件的amount,得到结果df3:df3 = filtered_df.groupby('patient_id')['amount'].sum().reset_index()
补充说明
如果df2中同一患者存在多个入院-出院区间,上述代码会自动匹配所有符合条件的区间,并将对应df1中的amount全部求和。
内容的提问来源于stack exchange,提问作者Praveen Chougale
相关产品推荐
相关产品推荐

