Разделите фрейм данных Pandas на основе содержимого временного столбца. - PullRequest
1 голос
/ 28 марта 2019

У меня есть кадр данных pandas, один столбец которого - дата / время.Данные охватывают более месяца и сортируются по времени в порядке возрастания.Теперь я хочу отделить данные о выходных и днях недели, это мой код:

data = pd.read_csv('Data.csv')
data.head()

              Time                     A       B      C
0    2018-12-26 14:04:05.519842       276     120     76
1    2018-12-26 14:05:05.730416       52      52      12
2    2018-12-26 14:07:07.791897       52      52      12
3    2018-12-26 14:08:05.373717       200     210     40
4    2018-12-26 14:10:05.861872       40      106     0

Введите новый столбец с именем weekday

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

weekday_data = data[data['weekday'] < 5 ].drop(columns=['weekday'])
weekend_data = data[data['weekday'] >= 5 ].drop(columns=['weekday'])

Так что weekday_data содержит все данные из Mon-Пт, а weekend_data содержит все данные в субботу и воскресенье.

Теперь я хочу, чтобы данные выходных дней содержали все данные с пт 17:00 и далее (не все данные пятницы) до вс 23: 59: 00.
Примечание: 2 выходных кадра данных (weekday_data и weekend_data) должны быть отсортированы по времени, как и мои исходные данные.

Как мне этого добиться?

1 Ответ

1 голос
/ 28 марта 2019

Использование:

rng = pd.date_range('2019-03-29 11:00:00', periods=30, freq='3H')
data = pd.DataFrame({'Time': rng, 'a': range(len(rng))})  
print (data)
                  Time   a
0  2019-03-29 11:00:00   0
1  2019-03-29 14:00:00   1
2  2019-03-29 17:00:00   2
3  2019-03-29 20:00:00   3
4  2019-03-29 23:00:00   4
5  2019-03-30 02:00:00   5
6  2019-03-30 05:00:00   6
7  2019-03-30 08:00:00   7
8  2019-03-30 11:00:00   8
9  2019-03-30 14:00:00   9
10 2019-03-30 17:00:00  10
11 2019-03-30 20:00:00  11
12 2019-03-30 23:00:00  12
13 2019-03-31 02:00:00  13
14 2019-03-31 05:00:00  14
15 2019-03-31 08:00:00  15
16 2019-03-31 11:00:00  16
17 2019-03-31 14:00:00  17
18 2019-03-31 17:00:00  18
19 2019-03-31 20:00:00  19
20 2019-03-31 23:00:00  20
21 2019-04-01 02:00:00  21
22 2019-04-01 05:00:00  22
23 2019-04-01 08:00:00  23
24 2019-04-01 11:00:00  24
25 2019-04-01 14:00:00  25
26 2019-04-01 17:00:00  26
27 2019-04-01 20:00:00  27
28 2019-04-01 23:00:00  28
29 2019-04-02 02:00:00  29

Новый столбец необязателен, создайте маску с помощью Series.dt.weekday по сравнению с >5, к которому добавляется | для поразрядной OR с другой маской - только фильтрация Fridays с Series.dt.hour с - с цепочкой & для побитового AND:

m1 = data['Time'].dt.weekday >= 5
m2 = (data['Time'].dt.weekday == 4) & (data['Time'].dt.hour >= 17)
m = m1 | m2

weekend_data = data[m]    
weekday_data = data[~m]

print (weekend_data)
                  Time   a
2  2019-03-29 17:00:00   2
3  2019-03-29 20:00:00   3
4  2019-03-29 23:00:00   4
5  2019-03-30 02:00:00   5
6  2019-03-30 05:00:00   6
7  2019-03-30 08:00:00   7
8  2019-03-30 11:00:00   8
9  2019-03-30 14:00:00   9
10 2019-03-30 17:00:00  10
11 2019-03-30 20:00:00  11
12 2019-03-30 23:00:00  12
13 2019-03-31 02:00:00  13
14 2019-03-31 05:00:00  14
15 2019-03-31 08:00:00  15
16 2019-03-31 11:00:00  16
17 2019-03-31 14:00:00  17
18 2019-03-31 17:00:00  18
19 2019-03-31 20:00:00  19
20 2019-03-31 23:00:00  20

print (weekday_data)
                  Time   a
0  2019-03-29 11:00:00   0
1  2019-03-29 14:00:00   1
21 2019-04-01 02:00:00  21
22 2019-04-01 05:00:00  22
23 2019-04-01 08:00:00  23
24 2019-04-01 11:00:00  24
25 2019-04-01 14:00:00  25
26 2019-04-01 17:00:00  26
27 2019-04-01 20:00:00  27
28 2019-04-01 23:00:00  28
29 2019-04-02 02:00:00  29
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...