我赶上了这种情况,不知道该如何解决。 我有一个数据框,试图在熊猫数据框的“日期”列中添加“ 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
答案 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之间即可