我需要根据另一个表中的数据范围,使用一个表中的生效日期提取值。一个范围内的最近生效日期应该是使用的新费率。
df1:
ID EffectiveDate Benefit OldRate NewRate
45jk9548 03/01/2017 Dental 0 15
45jk9548 01/01/2018 Dental 15 17
45jk9548 01/25/2018 Dental 17 50
df2:
ID Benefit FromDate ToDate
45jk9548 Dental 12/25/2017 01/02/2018
45jk9548 Dental 01/08/2018 01/15/2018
45jk9548 Dental 01/15/2018 01/22/2018
45jk9548 Dental 01/22/2018 01/29/2018
45jk9548 Dental 01/29/2018 02/05/2018
理想情况下,从df1中提取数据或合并表将导致:
ID Benefit FromDate ToDate EffectiveDate Rate
45jk9548 Dental 12/25/2017 01/02/2018 01/01/2018 17
45jk9548 Dental 01/08/2018 01/15/2018 01/01/2018 17
45jk9548 Dental 01/15/2018 01/22/2018 01/01/2018 17
45jk9548 Dental 01/22/2018 01/29/2018 01/25/2018 50
45jk9548 Dental 01/22/2018 01/29/2018 01/25/2018 50
我已经尝试了一些嵌套for循环,但我一直得到最大/最后一个速率作为所有行的速率。感谢并非常感谢有关如何处理此问题的任何意见。
答案 0 :(得分:0)
您可以先找到正确的EffectiveDate和Rate行,然后将它们与df2合并。
(
df2.ToDate
.apply(lambda x: df1.loc[df1.EffectiveDate.le(x)]
.sort_values('EffectiveDate')
[['EffectiveDate','NewRate']]
.iloc[-1]).apply(pd.Series)
.set_axis(['EffectiveDate', 'Rate'], axis=1, inplace=False)
.pipe(lambda x: pd.concat([df2,x], axis=1))
)
Out[285]:
ID Benefit FromDate ToDate EffectiveDate Rate
0 45jk9548 Dental 2017-12-25 2018-01-02 2018-01-01 17
1 45jk9548 Dental 2018-01-08 2018-01-15 2018-01-01 17
2 45jk9548 Dental 2018-01-15 2018-01-22 2018-01-01 17
3 45jk9548 Dental 2018-01-22 2018-01-29 2018-01-25 50
4 45jk9548 Dental 2018-01-29 2018-02-05 2018-01-25 50