获取开始日期和结束日期列之间的所有日期[重复]

Posted

技术标签:

【中文标题】获取开始日期和结束日期列之间的所有日期[重复]【英文标题】:Get all dates between startdate and enddate columns [duplicate] 【发布时间】:2019-04-23 20:08:54 【问题描述】:

我使用下面的 python 代码创建了一个数据框。

import pandas as pd
import datetime as dt

d = 'StartDate': pd.Series(["2018-11-01", "2018-11-04", "2018-11-06"]),
     'EndDate': pd.Series(["2018-11-03", "2018-11-05", "2018-11-10"])
df = pd.DataFrame(d)
df['StartDate'] = pd.to_datetime(df['StartDate'])
df['EndDate'] = pd.to_datetime(df['EndDate'])

我想要一列作为日期,它将包含 startdate 和 enddate 列值之间的日期。

预期输出:-

我确实在 R 中尝试过我已经熟悉的同样的事情。

R Script:- 

   df1 %>%
   rowwise() %>% 
   do(data.frame(.[1:2], date = seq(.$min_date, .$max_date, by = "1 day")))

谁能推荐我?

【问题讨论】:

我“建议”您自己试一试,然后再提出您遇到的任何具体问题。那么我们很乐意为您提供帮助。 ***.com/questions/7274267/… @Sociopath 不,他们想要给定范围之间的每个日期(天)的序列。一个已经回答的问题^^^^^^ 【参考方案1】:

date_range + merge

您可以使用pd.date_range 创建日期范围,并将两个数据框设置合并为outer 合并类型。最后,您可以使用fillna() 中的ffill 方法填充缺失值,该方法会将最后一个有效观察值向前传播到下一个有效回填。

print(df)

  StartDate    EndDate
0 2018-11-01 2018-11-03
1 2018-11-04 2018-11-05
2 2018-11-06 2018-11-10

dates = pd.DataFrame(pd.date_range(start=df.min().StartDate, 
                     end=df.max().EndDate), columns=['Date'])
pd.merge(left=dates, right=df, left_on='Date', right_on='StartDate', 
         how='outer').fillna(method='ffill')

    Date  StartDate    EndDate
0 2018-11-01 2018-11-01 2018-11-03
1 2018-11-02 2018-11-01 2018-11-03
2 2018-11-03 2018-11-01 2018-11-03
3 2018-11-04 2018-11-04 2018-11-05
4 2018-11-05 2018-11-04 2018-11-05
5 2018-11-06 2018-11-06 2018-11-10
6 2018-11-07 2018-11-06 2018-11-10
7 2018-11-08 2018-11-06 2018-11-10
8 2018-11-09 2018-11-06 2018-11-10
9 2018-11-10 2018-11-06 2018-11-10

【讨论】:

这仅在开始/结束期间不超过一圈时才有效 对于开始/结束时间段重叠时的相同结果,请参见此处:***.com/q/68227664/14463396

以上是关于获取开始日期和结束日期列之间的所有日期[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何计算Python Pandas中两列之间的日期差异[重复]

SQL列表在两个日期之间重复发生日期,结束日期为下一个开始日期

MYSQL在开始结束日期日期格式d-m-Y之间选择[重复]

根据不同的周开始和结束日期获取数据[重复]

php 获取开始日期与结束日期之间所有日期

在新日期vue.js中获取2个不同日期之间的所有日期[重复]