熊猫从日期中提取一年中的第几周

时间:2020-05-06 13:40:32

标签: python pandas

我赶上了这种情况,不知道该如何解决。 我有一个数据框,试图在熊猫数据框的“日期”列中添加“ week_of_year”和“ year”列,这很好。

import pandas as pd
df = pd.DataFrame({'date': ['2018-12-31', '2019-01-01', '2019-12-31', '2020-01-01']})
df['date'] = pd.to_datetime(df['date'])
df['week_of_year'] = df['date'].apply(lambda x: x.weekofyear)
df['year'] = df['date'].apply(lambda x: x.year)
print(df)

当前输出

       date       week_of_year    year
0    2018-12-31      1            2018
1    2019-01-01      1            2019
2    2019-12-31      1            2019
3    2020-01-01      1            2020

预期产量

所以在这里我期望的是2018年和2019年的最后一个日期分别是新年的第一周,分别是2019年和2020年,所以我想在这一年添加逻辑,其中周是1但日期属于前一年的数据,因此year列将按照预期的输出进行跟踪。

           date       week_of_year    year
    0    2018-12-31      1            2019
    1    2019-01-01      1            2019
    2    2019-12-31      1            2020
    3    2020-01-01      1            2020

1 个答案:

答案 0 :(得分:1)

尝试:

df['date'] = pd.to_datetime(df['date'])
df['week_of_year'] = df['date'].dt.weekofyear
df['year']=(df['date']+pd.to_timedelta(6-df['date'].dt.weekday, unit='d')).dt.year

输出:

        date  week_of_year  year
0 2018-12-31             1  2019
1 2019-01-01             1  2019
2 2019-12-31             1  2020
3 2020-01-01             1  2020

几件事-通常避免使用.apply(..)

对于datetime列,您可以通过df[col].dt变量与日期进行交互。

然后要获取一周的最后一天,只需将日期6-weekday添加到其中weekday到日期的0(星期一)至6之间即可