【发布时间】:2022-01-04 19:58:31
【问题描述】:
这是我第一次在这里发帖,这是一个棘手的问题,基本上我有这张表,其中有一位患者服用了某种药物,但由于患者可以购买几盒,因此缺少某些日期一次,所以我基本上根据患者购买的盒子数量复制了这些行。这将我带到了这张桌子:
您可以看到重复的行都购买了足够两个月的药物,在这种情况下。
我需要做的是按顺序转换日期,但我只能在日期重复时这样做,所以我不会更改其他患者的原始数据。
我试过这样的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 |
等等。
【问题讨论】:
-
但是,“2017-02-31”是更正的日期吗?
-
感谢您的提问。所以基本上病人买了足够两个月的药,所以我需要延长它足够的时间。正如您在表格图片中看到的那样,他每个月买了两盒,这意味着他已经够用一年了,这就是我所需要的。基本上他需要在桌子上,用那种特殊的药物治疗 12 个月。该表还有其他患者。编辑:语法
标签: python pandas dataframe date for-loop