【发布时间】:2019-05-20 18:09:20
【问题描述】:
我有以下数据框:
date_one date_two
2634 2018-05-22 None
2018 2017-06-22 2017-09-22
2706 2016-09-14 None
3018 2016-06-22 None
我想使用以下逻辑在date_two 列中填写日期:
如果
date_two列在该行中已有值,则不执行任何操作对于
date_one列的第一行,请使用当前日期或date_one列的 6 个月填写date_two列,以较早者为准对于所有其他行,使用当前行上方行中
day_one列中日期前一天的日期或当前当前行中date_one日期后 6 个月填写date_two列行,以较早者为准
最终的结果是这样的:
date_one date_two
2634 2018-05-22 2018-11-18
2018 2017-06-22 2017-09-22
2706 2016-09-14 2017-03-13
3018 2016-06-22 2016-09-13
注意:date_two 的最后一列包含 2016-09-13,因为 2016-09-13 比该行上方 date_one 行中的日期早一天(规则 #2)。感谢@WeNYoBen。
我尝试使用iterrows,但不确定如何访问前一行的值
【问题讨论】:
-
date_two 的最后几列为什么是 2016-09-13 ?
-
@WeNYoBen 这是因为 2016-09-13 比该行上方
date_one行中的日期早一天 -
看第一行。 date_one 是 2018-05-22,所以: 1. 当前日期是 2019-05-20。 2. date_one 6 个月后的日期是 2018-11-22。 3. 这两个较早的日期是2018-11-22。那么为什么预期输出中的 date_two 是 2018-11-18?我认为,应该是 2018-11-22(规则 #2)。
-
@Valdi_Bo 感谢您指出这一点!6 个月,我的意思是 180 天,因为有些月有 31 天,
date_two的值与您认为的不同