获取开始日期和结束日期列之间的所有日期[重复]
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中两列之间的日期差异[重复]