如何将诊断后用药DataFrame转换为按日统计的用药频次表?
问题
现有如下DataFrame:
import pandas as pd df = pd.DataFrame({ 'id': [1, 2, 3, 4], 'date_diag': ['01-01-2000']*4, 'date_medication': ['03-01-2000', '02-01-2000', '04-01-2000', '05-01-2000'], 'medication_code': ['A', 'A', 'B', 'B'] })
需要生成统计各类药物在诊断日期后第1-7天每日使用次数的表格,目标格式如下:
medication day1 day2 day3 day4 day5 day6 day7 0 A 0 1 1 0 0 0 0 1 B 0 0 0 1 1 0 0
解决方案
通过Pandas完成日期计算与交叉统计,步骤如下:
- 转换日期格式:将诊断日期和用药日期转为
datetime类型,方便计算天数差 - 计算诊断后天数:用药日期与诊断日期的天数差加1,得到对应
day1到day7的标识 - 交叉统计次数:用
crosstab统计每种药物在各天的使用次数 - 补全缺失天数:确保包含
day1到day7所有列,缺失值填充为0
完整代码:
# 转换日期格式 df['date_diag'] = pd.to_datetime(df['date_diag'], format='%d-%m-%Y') df['date_medication'] = pd.to_datetime(df['date_medication'], format='%d-%m-%Y') # 计算诊断后第几天 df['day'] = (df['date_medication'] - df['date_diag']).dt.days + 1 # 生成交叉表统计次数 result = pd.crosstab(df['medication_code'], df['day']) # 调整列名并补全day1-day7 result.columns = [f'day{col}' for col in result.columns] result = result.reindex(columns=[f'day{i}' for i in range(1,8)], fill_value=0) # 重命名索引为目标格式 result = result.rename_axis('medication').reset_index() print(result)
运行代码后即可得到目标表格。
内容的提问来源于stack exchange,提问作者Economist_Ayahuasca
相关产品推荐
相关产品推荐

