如何在特定的起始工作日(例如星期四)按周拆分数据框?

How to split a dataframe by week on a particular starting weekday (e.g, Thursday)?

我正在使用 Python,并且我有一个 Dataframe,其中提到了所有日期和工作日。 我想把它们分成一周(比如 - 周四到周四)

数据框 -

现在我想以这种格式划分这个数据帧-

Date    Weekday
0   2021-01-07   Thursday
1   2021-01-08     Friday
2   2021-01-09   Saturday
3   2021-01-10     Sunday
4   2021-01-11     Monday
5   2021-01-12    Tuesday
6   2021-01-13  Wednesday
7   2021-01-14   Thursday,

Date    Weekday
0   2021-01-14   Thursday
1   2021-01-15     Friday
2   2021-01-16   Saturday
3  2021-01-17     Sunday
4  2021-01-18     Monday
5  2021-01-19    Tuesday
6  2021-01-20  Wednesday
7  2021-01-21   Thursday,

Date    Weekday
0  2021-01-21   Thursday
1  2021-01-22     Friday
2  2021-01-23   Saturday
3  2021-01-24     Sunday
4  2021-01-25     Monday
5  2021-01-26    Tuesday
6  2021-01-27  Wednesday
7  2021-01-28   Thursday,
Date    Weekday
0  2021-01-28   Thursday
1  2021-01-29     Friday
2  2021-01-30   Saturday.

采用这种格式,但我不知道如何划分这个数据帧。

如果日期还不是日期时间类型,您可以使用 pandas.to_datetime,然后使用 dt.week 访问器 groupby:

dfs = [g for _,g in df.groupby(pd.to_datetime(df['Date']).dt.week)]

或者,如果您有几年的时间,请使用 dt.to_period:

dfs = [g for _,g in df.groupby(pd.to_datetime(df['Date']).dt.to_period('W'))]

输出:

[         Date   Weekday
 0  2021-01-07  Thursday
 1  2021-01-08    Friday
 2  2021-01-09  Saturday
 3  2021-01-10    Sunday,
           Date    Weekday
 4   2021-01-11     Monday
 5   2021-01-12    Tuesday
 6   2021-01-13  Wednesday
 7   2021-01-14   Thursday
 8   2021-01-14   Thursday
 9   2021-01-15     Friday
 10  2021-01-16   Saturday
 11  2021-01-17     Sunday,
           Date    Weekday
 12  2021-01-18     Monday
 13  2021-01-19    Tuesday
 14  2021-01-20  Wednesday
 15  2021-01-21   Thursday
 16  2021-01-21   Thursday
 17  2021-01-22     Friday
 18  2021-01-23   Saturday
 19  2021-01-24     Sunday,
           Date    Weekday
 20  2021-01-25     Monday
 21  2021-01-26    Tuesday
 22  2021-01-27  Wednesday
 23  2021-01-28   Thursday
 24  2021-01-28   Thursday
 25  2021-01-29     Friday
 26  2021-01-30   Saturday]
变体

作为字典:

{k:g for k,g in df.groupby(pd.to_datetime(df['Date']).dt.to_period('W'))}

reset_index 个子组:

[g.reset_index() for _,g in df.groupby(pd.to_datetime(df['Date']).dt.to_period('W'))]

星期四在 Wednesday/starting 结束,anchor offsets

[g.reset_index() for _,g in df.groupby(pd.to_datetime(df['Date']).dt.to_period('W-WED'))]