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

В pandas как я могу группировать по будням() для столбца datetime?

Я хотел бы отфильтровать выходные данные и просматривать данные только по будням (mon (0) -fri (4)). Я новичок в pandas, что лучший способ выполнить это в pandas?

import datetime
from pandas import *

data = read_csv("data.csv")
data.my_dt 

Out[52]:
0     2012-10-01 02:00:39
1     2012-10-01 02:00:38
2     2012-10-01 02:01:05
3     2012-10-01 02:01:07
4     2012-10-01 02:02:03
5     2012-10-01 02:02:09
6     2012-10-01 02:02:03
7     2012-10-01 02:02:35
8     2012-10-01 02:02:33
9     2012-10-01 02:03:01
10    2012-10-01 02:08:53
11    2012-10-01 02:09:04
12    2012-10-01 02:09:09
13    2012-10-01 02:10:20
14    2012-10-01 02:10:45
...

Я хотел бы сделать что-то вроде:

weekdays_only = data[data.my_dt.weekday() < 5]

AttributeError: объект 'numpy.int64' не имеет атрибута 'weekday'

но это не работает, я не совсем понял, как обращаются к объектам datetime.

Конечная цель состоит в том, чтобы упорядочивать иерархию по часовому диапазону в будние дни, например:

monday, 0-6, 7-12, 13-18, 19-23
tuesday, 0-6, 7-12, 13-18, 19-23
4b9b3361

Ответ 1

ваш вызов функции "weekday" не работает, поскольку он работает с индексом data.my_dt, который является массивом int64 (откуда приходит сообщение об ошибке)

вы можете создать новый столбец в данных, содержащих дни недели, используя что-то вроде:

data['weekday'] = data['my_dt'].apply(lambda x: x.weekday())

то вы можете фильтровать по будням с помощью:

weekdays_only = data[data['weekday'] < 5 ]

Я надеюсь, что это поможет

Ответ 2

Ускоренным способом было бы использовать DatetimeIndex.weekday, например:

temp = pd.DatetimeIndex(data['my_dt'])
data['weekday'] = temp.weekday

Гораздо быстрее, особенно для большого количества строк. Для получения дополнительной информации отметьте этот ответ.