Python 将日期范围拆分为行周

Python 将日期范围拆分为行周,python,pandas,Python,Pandas,我有一个数据框,如下所示 Unit # Start Date End Date 7417 2/6/2017 3/5/2017 我想把它分成几个星期 输出应该是 Unit # Start Date End Date 7417 2/6/2017 2/12/2017 7417 2/13/2017 2/19/2017 7417 2/20/2017 2/26/2017 7417 2/27/2017 3/05/2017 有人能帮我吗 您没有编写任何代码,因此我不会给您完整的解决方

我有一个数据框,如下所示

Unit #  Start Date  End Date

7417      2/6/2017  3/5/2017
我想把它分成几个星期 输出应该是

Unit #  Start Date  End Date

7417 2/6/2017 2/12/2017
7417 2/13/2017 2/19/2017
7417 2/20/2017 2/26/2017
7417 2/27/2017 3/05/2017

有人能帮我吗

您没有编写任何代码,因此我不会给您完整的解决方案

以下是一种在两个日期之间重复几周的方法:

import datetime

date_format = "%m/%d/%Y"
d1 = datetime.datetime.strptime("2/6/2017", date_format).date()
d2 = datetime.datetime.strptime("3/5/2017", date_format).date()
d = d1
step = datetime.timedelta(days=7)

while d < d2:
    print(d.strftime(date_format))
    d += step
    
# 02/06/2017
# 02/13/2017
# 02/20/2017
# 02/27/2017
导入日期时间
日期格式=“%m/%d/%Y”
d1=datetime.datetime.strtime(“2017年6月2日,日期格式”).date()
d2=datetime.datetime.strtime(“2017年3月5日,日期格式”).date()
d=d1
step=datetime.timedelta(天=7)
当d
您没有编写任何代码,因此我不会给您一个完整的解决方案

以下是一种在两个日期之间重复几周的方法:

import datetime

date_format = "%m/%d/%Y"
d1 = datetime.datetime.strptime("2/6/2017", date_format).date()
d2 = datetime.datetime.strptime("3/5/2017", date_format).date()
d = d1
step = datetime.timedelta(days=7)

while d < d2:
    print(d.strftime(date_format))
    d += step
    
# 02/06/2017
# 02/13/2017
# 02/20/2017
# 02/27/2017
导入日期时间
日期格式=“%m/%d/%Y”
d1=datetime.datetime.strtime(“2017年6月2日,日期格式”).date()
d2=datetime.datetime.strtime(“2017年3月5日,日期格式”).date()
d=d1
step=datetime.timedelta(天=7)
当d
假设您有一个包含多个
单元的数据帧35;
您可以使用以下代码来实现您想要的:

import datetime
import pandas as pd

df = pd.DataFrame([[7417, "2/6/2017", "3/5/2017"],[7418, "3/6/2017", "4/7/2017"]],
columns = ["Unit #", "Start Date", "End Date"])

# Convert dtaframe to dates
df['Start Date'] = pd.to_datetime(df['Start Date'])
df['End Date'] = pd.to_datetime(df['End Date'])

df_out = pd.DataFrame()
week = 7

# Iterate over dataframe rows
for index, row in df.iterrows():
    date = row["Start Date"]
    date_end = row["End Date"]
    unit = row["Unit #"]
    # Get the weeks for the row
    while date < date_end:
        date_next = date + datetime.timedelta(week - 1)
        df_out = df_out.append([[unit, date, date_next]])
        date = date_next + datetime.timedelta(1)

# Remove extra index and assign columns as original dataframe
df_out = df_out.reset_index(drop=True)
df_out.columns = df.columns
输出
df_out
如下所示:

>>> df_out
   Unit #           Start Date             End Date
0    7417  2017-02-06 00:00:00  2017-02-12 00:00:00
1    7417  2017-02-13 00:00:00  2017-02-19 00:00:00
2    7417  2017-02-20 00:00:00  2017-02-26 00:00:00
3    7417  2017-02-27 00:00:00  2017-03-05 00:00:00
4    7418  2017-03-06 00:00:00  2017-03-12 00:00:00
5    7418  2017-03-13 00:00:00  2017-03-19 00:00:00
6    7418  2017-03-20 00:00:00  2017-03-26 00:00:00
7    7418  2017-03-27 00:00:00  2017-04-02 00:00:00
8    7418  2017-04-03 00:00:00  2017-04-09 00:00:00

假设您有一个包含多个
单元35;
的数据帧,您可以使用以下代码来实现您想要的:

import datetime
import pandas as pd

df = pd.DataFrame([[7417, "2/6/2017", "3/5/2017"],[7418, "3/6/2017", "4/7/2017"]],
columns = ["Unit #", "Start Date", "End Date"])

# Convert dtaframe to dates
df['Start Date'] = pd.to_datetime(df['Start Date'])
df['End Date'] = pd.to_datetime(df['End Date'])

df_out = pd.DataFrame()
week = 7

# Iterate over dataframe rows
for index, row in df.iterrows():
    date = row["Start Date"]
    date_end = row["End Date"]
    unit = row["Unit #"]
    # Get the weeks for the row
    while date < date_end:
        date_next = date + datetime.timedelta(week - 1)
        df_out = df_out.append([[unit, date, date_next]])
        date = date_next + datetime.timedelta(1)

# Remove extra index and assign columns as original dataframe
df_out = df_out.reset_index(drop=True)
df_out.columns = df.columns
输出
df_out
如下所示:

>>> df_out
   Unit #           Start Date             End Date
0    7417  2017-02-06 00:00:00  2017-02-12 00:00:00
1    7417  2017-02-13 00:00:00  2017-02-19 00:00:00
2    7417  2017-02-20 00:00:00  2017-02-26 00:00:00
3    7417  2017-02-27 00:00:00  2017-03-05 00:00:00
4    7418  2017-03-06 00:00:00  2017-03-12 00:00:00
5    7418  2017-03-13 00:00:00  2017-03-19 00:00:00
6    7418  2017-03-20 00:00:00  2017-03-26 00:00:00
7    7418  2017-03-27 00:00:00  2017-04-02 00:00:00
8    7418  2017-04-03 00:00:00  2017-04-09 00:00:00

你尝试了什么?你尝试了什么?是的,但它会在2017年2月27日停止,如果你想跳到2017年3月5日,并想知道这段时间之间的时间,那么你需要在while之后再做一次,并在那里添加结束日期。是的,但它会在2017年2月27日停止,如果你想跳到2017年5月3日,并想知道这两天之间的时间,那么你需要在while之后再做一次,并在那里添加结束日期。