Подтвердить что ты не робот

Получить день недели/день недели для столбца Datetime в DataFrame

У меня есть DataFrame df, как показано ниже (выдержка, "Timestamp" - это индекс):

Timestamp              Value
2012-06-01 00:00:00     100
2012-06-01 00:15:00     150
2012-06-01 00:30:00     120
2012-06-01 01:00:00     220
2012-06-01 01:15:00      80
...and so on.

Мне нужен новый столбец df['weekday'] с соответствующим днем ​​недели/днями недели.

Как я могу получить это?

4b9b3361

Ответ 1

Используйте новое свойство dt.dayofweek:

In [2]:

df['weekday'] = df['Timestamp'].dt.dayofweek
df
Out[2]:
            Timestamp  Value  weekday
0 2012-06-01 00:00:00    100        4
1 2012-06-01 00:15:00    150        4
2 2012-06-01 00:30:00    120        4
3 2012-06-01 01:00:00    220        4
4 2012-06-01 01:15:00     80        4

В ситуации, когда Timestamp является вашим индексом, вам нужно сбросить индекс и затем вызвать свойство dt.dayofweek:

In [14]:

df = df.reset_index()
df['weekday'] = df['Timestamp'].dt.dayofweek
df
Out[14]:
            Timestamp  Value  weekday
0 2012-06-01 00:00:00    100        4
1 2012-06-01 00:15:00    150        4
2 2012-06-01 00:30:00    120        4
3 2012-06-01 01:00:00    220        4
4 2012-06-01 01:15:00     80        4

Странно, если вы пытаетесь создать серию из индекса, чтобы не сбрасывать индекс, вы получаете значения NaN как и при использовании результата reset_index для вызова свойства dt.dayofweek без присвоения результата reset_index обратно исходному df:

In [16]:

df['weekday'] = pd.Series(df.index).dt.dayofweek
df
Out[16]:
                     Value  weekday
Timestamp                          
2012-06-01 00:00:00    100      NaN
2012-06-01 00:15:00    150      NaN
2012-06-01 00:30:00    120      NaN
2012-06-01 01:00:00    220      NaN
2012-06-01 01:15:00     80      NaN
In [17]:

df['weekday'] = df.reset_index()['Timestamp'].dt.dayofweek
df
Out[17]:
                     Value  weekday
Timestamp                          
2012-06-01 00:00:00    100      NaN
2012-06-01 00:15:00    150      NaN
2012-06-01 00:30:00    120      NaN
2012-06-01 01:00:00    220      NaN
2012-06-01 01:15:00     80      NaN

РЕДАКТИРОВАТЬ

Как указал мне пользователь @joris, вы можете просто получить доступ к атрибуту weekday индекса, чтобы следующее работало и было более компактным:

df['Weekday'] = df.index.weekday

Ответ 2

Если Timestamp, если a datatime, вы можете просто использовать:
df['weekday'] = df['Timestamp'].apply(lambda x: x.weekday())

или

df['weekday'] = pd.to_datetime(df['Timestamp']).apply(lambda x: x.weekday())