将日期转换为每周的星期一日期

Converting date to Monday date of each week

我有一个 df:

date
2021-06-28
2021-06-29
2021-06-30
2021-07-02
2021-07-04
2021-07-07
2021-08-06
2021-08-07

我正在尝试将其转换为周,我知道我可以使用 df.date.dt.isocalendar().week,但是这个 returns 具有默认开始日期的周数,而我的开始日期是 2021-06-28 . 我可以在 df 中使用 pd.Grouper(key = 'date', freq = 'W-MON', label = 'left', closed = 'left')groupby 中实现日期,但我想在不使用 groupby 的情况下获得相同的输出 - 只需将函数应用于 date 列。

我的目标是:

date
2021-06-28
2021-06-28
2021-06-28
2021-06-28
2021-06-28
2021-07-05
2021-08-02
2021-08-02

因为这些日期代表该日期所在的每个星期的星期一。

你可以转换成'W-SUN'period得到第一天:

df['date'] = pd.to_datetime(df['date'])

df['Monday'] = df['date'].dt.to_period('W-SUN').dt.start_time

注意。为什么 'W-SUN'?这表示星期 ending 在 SUN(天)中,因此从星期一开始。见 anchored offsets.

输出:

        date     Monday
0 2021-06-28 2021-06-28
1 2021-06-29 2021-06-28
2 2021-06-30 2021-06-28
3 2021-07-02 2021-06-28
4 2021-07-04 2021-06-28
5 2021-07-07 2021-07-05
6 2021-08-06 2021-08-02
7 2021-08-07 2021-08-02