如何基于重复值与前置记录更新Pandas DataFrame的日期字段
我是第一次在这里提问,本次遇到的问题较为棘手:我有一张记录患者服用特定药物情况的表格,由于患者可一次性购买多盒药品,部分日期存在缺失,因此我基于患者购买的药盒数复制了对应行数,得到如下表格:
可以看到本案例中,重复行对应的购药量足够使用两个月。
我需要将日期转换为连续序列,但仅对存在重复日期的行执行操作,避免修改其他患者的原始数据。
我尝试编写了如下for循环:
for index,row in output_table_1.iterrows(): if index == 0: next elif output_table_1.loc[index, 'Date'] == output_table_1.loc[index-1, 'Date']: output_table_1.at[index, 'Date'] = row['Date'] + pd.Timedelta(days=28) else: output_table_1.at[index, 'Date'] = row['Date']
但它无法得到我需要的结果,我需要基于上一行的信息修改当前行的日期,示例如下:
原始数据
| 序号 | Date |
|---|---|
| 6 | 2017-01-31 |
| 7 | 2017-01-31 |
| 8 | 2017-02-28 |
| 9 | 2017-02-28 |
| 10 | 2017-03-31 |
| 11 | 2017-03-31 |
| 12 | 2017-04-30 |
| 13 | 2017-04-30 |
第一次循环后
| 序号 | Date |
|---|---|
| 6 | 2017-01-31 |
| 7 | 2017-02-31 |
| 8 | 2017-02-28 |
| 9 | 2017-02-28 |
| 10 | 2017-03-31 |
| 11 | 2017-03-31 |
| 12 | 2017-04-30 |
| 13 | 2017-04-30 |
第二次循环后
| 序号 | Date |
|---|---|
| 6 | 2017-01-31 |
| 7 | 2017-02-31 |
| 8 | 2017-03-28 |
| 9 | 2017-02-28 |
| 10 | 2017-03-31 |
| 11 | 2017-03-31 |
| 12 | 2017-04-30 |
| 13 | 2017-04-30 |
第三次循环后
| 序号 | Date |
|---|---|
| 6 | 2017-01-31 |
| 7 | 2017-02-31 |
| 8 | 2017-03-28 |
| 9 | 2017-04-28 |
| 10 | 2017-03-31 |
| 11 | 2017-03-31 |
| 12 | 2017-04-30 |
| 13 | 2017-04-30 |
最终预期输出
| 序号 | Date |
|---|---|
| 6 | 2017-01-31 |
| 7 | 2017-02-31 |
| 8 | 2017-03-28 |
| 9 | 2017-04-28 |
| 10 | 2017-05-31 |
| 11 | 2017-06-31 |
| 12 | 2017-07-30 |
| 13 | 2017-08-30 |
以此类推。
内容的提问来源于stack exchange,提问作者João Raposo
相关产品推荐
相关产品推荐

