【问题标题】:Calculate date differences, max and min date, and date counts using Pandas dataframes使用 Pandas 数据框计算日期差异、最大和最小日期以及日期计数
【发布时间】:2021-11-11 16:29:54
【问题描述】:

我有以下数据集,每个患者 ID 有多个患者 ID 和治疗日期:

Patient_ID Dates
2038 2012-01-02
2038 2012-02-13
2038 2012-02-27
2120 2005-02-05
2120 2009-03-31

我想做的是:

A) 提取每位患者的总治疗时间,然后

B) 保存最大和最小治疗日期(每个患者 ID),并且

C) 最后计算每个患者 ID 的治疗次数(日期)。

这是我目前尝试过的:

df=Patient_Dates
df['Dates'] = pd.to_datetime(df['Dates'])
grouped = df.groupby(['Patient_ID'])
op = []
for Name, group in grouped:
    LengthOfTreatment_days = group['Dates'].max() - group['Dates'].min()
    op.append([Name, LengthOfTreatment_days])

这算 A) 天数。但是,我找不到执行上述 B) 和 C) 的方法。

任何想法将不胜感激。

【问题讨论】:

  • 请不要将您的数据发布为屏幕截图。您在编辑之前有表格,我已将其恢复。如果需要,更改数据(在文本内)。

标签: python dataframe


【解决方案1】:

试试groupbyagg

output = df.groupby("Patient_ID")["Dates"].agg(max_date="max", min_date="min", num_treatments="count")
output["duration"] = (output["max_date"]-output["min_date"]).dt.days

>>> output
             max_date   min_date  num_treatments  duration
Patient_ID                                                
2038       2012-02-27 2012-01-02               3        56
2120       2009-03-31 2005-02-05               2      1515

【讨论】:

  • 太好了,谢谢 not_speshal,它成功了!最后一个问题,如何将列名放在同一行(Patient_ID 比 max_date 低一排)?我尝试使用 iloc 但它不起作用。
  • 回答我上一个问题,我现在知道该怎么做了:output2=output.reset_index()
猜你喜欢
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 2019-08-17
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多