我有一个数据框
df
:
df = pd.DataFrame({'id': [1,2,3,4,5],
'week': [201613, 201714, 201715, 201716, 201717]})
看起来像:
id week
0 1 201613
1 2 201714
2 3 201715
3 4 201716
4 5 201717
周栏表示特定一年中的第几周。例如
201613
表示 2016 年第 13 周。
我希望添加一个新列
week_timestamp
,它应该给我本周星期一的时间戳。它应该给我类似 2016–03–28 00:00:00
的东西 201613
。
我怎样才能在 pandas 中做到这一点?
import pandas as pd
import datetime as dt
df = pd.DataFrame({'id': [1,2,3,4,5], 'week': [201613, 201714, 201715,
201716, 201717]})
#use modulo to get the week number
df['weeknumber'] = df['week'] % 100
#use string slice to get year number
df['yearnumber'] = df['week'].astype(str).str[:4]
#create input for datetime.strptime
df['timestring'] = df['yearnumber'].astype(str)+"-
w"+df['weeknumber'].astype(str) + '-1'
#create new column
df['monday'] = df['timestring'].apply(lambda x: dt.datetime.strptime(x,
"%Y-W%W-%w"))
结果:
id week weeknumber yearnumber timestring monday
1 201613 13 2016 2016-w13-1 2016-03-28
2 201714 14 2017 2017-w14-1 2017-04-03
3 201715 15 2017 2017-w15-1 2017-04-10
4 201716 16 2017 2017-w16-1 2017-04-17
5 201717 17 2017 2017-w17-1 2017-04-24
df['week_timestamp'] = pd.to_datetime(df['week'].astype(str) + '1', format='%Y%W%w')