我有一个 Pandas 数据框,其设置如下:
Code StartDate EndDate
A 2024-07-01 2024-08-03
B 2024-08-06 2024-08-10
C 2024-08-11 2024-08-31
我的代码中有一部分会每天进行迭代(从 2024-07-01 开始),并且我试图返回相应的Code
给定日期(如果日期不在任何 StartDate/EndDate 范围内,则返回回退)。
我最初的想法是做类似的事情:
DAYS = DAY_DF['Date'].tolist() # Just a list of each day
for DAY in DAYS:
code = False
for i,r in df.iterrows():
if r['StartDate'] <= DAY <= r['EndDate']:
code = r['Code']
break
if not code: # `Code` is still False
code = 'Fallback_Code'
但是,对数据框中的每一行进行迭代似乎非常低效,特别是因为我的数据框中有很多记录。
以下是一些示例输入和最终的代码输出:
2024-07-03 -> 'A'
2024-08-04 -> 'Fallback_Code'
2024-08-10 -> 'B'
2024-08-11 -> 'C'
一种可能的解决方案是将
StartDate
和EndDate
列转换为datetime
格式(以允许比较日期)。然后检查特定日期(例如)是否属于和2024-07-03
定义的任何日期范围。如果是,则从这些行中检索第一个对应的行;如果不是,则返回。StartDate
EndDate
Code
Fallback code
要获取日期列表的代码,我们可以使用以下命令:
输出: