[英]Get all dates between start and end date pandas columns
我正在尝试获取两个开始日期和结束日期 pandas 列之间的日期列表,以及单独的 ID。 我找到了一个基本上是我所追求的答案( https://stackoverflow.com/a/53409207/14463396 )但这仅在开始日期和结束日期之间的时间段不重叠时才有效,我可以似乎没有弄清楚如何适应这个/使用替代方法来获得我所追求的 output。
下面是一个示例 dataframe:
df = pd.DataFrame({'ID' : [1, 2, 3],
'Start Date': ["2021-06-01", "2021-06-02", "2021-06-04"],
'End Date': ["2021-06-03", "2021-06-05", "2021-06-08"]})
这就是所需的 output 应该是:
ID Start Date End Date Dates
0 1 2021-06-01 2021-06-03 2021-06-01
1 1 2021-06-01 2021-06-03 2021-06-02
2 1 2021-06-01 2021-06-03 2021-06-03
3 2 2021-06-02 2021-06-05 2021-06-02
4 2 2021-06-02 2021-06-05 2021-06-03
5 2 2021-06-02 2021-06-05 2021-06-04
6 2 2021-06-02 2021-06-05 2021-06-05
7 3 2021-06-04 2021-06-08 2021-06-04
8 3 2021-06-04 2021-06-08 2021-06-05
9 3 2021-06-04 2021-06-08 2021-06-06
10 3 2021-06-04 2021-06-08 2021-06-07
11 3 2021-06-04 2021-06-08 2021-06-08
非常感谢任何帮助:)
尝试创建日期列表然后explode
df['Start Date'] = pd.to_datetime(df['Start Date'])
df['End Date'] = pd.to_datetime(df['End Date'])
df['Dates'] = [pd.date_range(x, y) for x , y in zip(df['Start Date'],df['End Date'])]
df = df.explode('Dates')
df
Out[108]:
ID Start Date End Date Dates
0 1 2021-06-01 2021-06-03 2021-06-01
0 1 2021-06-01 2021-06-03 2021-06-02
0 1 2021-06-01 2021-06-03 2021-06-03
1 2 2021-06-02 2021-06-05 2021-06-02
1 2 2021-06-02 2021-06-05 2021-06-03
1 2 2021-06-02 2021-06-05 2021-06-04
1 2 2021-06-02 2021-06-05 2021-06-05
2 3 2021-06-04 2021-06-08 2021-06-04
2 3 2021-06-04 2021-06-08 2021-06-05
2 3 2021-06-04 2021-06-08 2021-06-06
2 3 2021-06-04 2021-06-08 2021-06-07
2 3 2021-06-04 2021-06-08 2021-06-08
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.