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

如何将诊断后用药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完成日期计算与交叉统计,步骤如下:

  1. 转换日期格式:将诊断日期和用药日期转为datetime类型,方便计算天数差
  2. 计算诊断后天数:用药日期与诊断日期的天数差加1,得到对应day1到day7的标识
  3. 交叉统计次数:用crosstab统计每种药物在各天的使用次数
  4. 补全缺失天数:确保包含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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:25:19