Изменение индексов временных промежутков

Есть csv файл с датами, хочу сделать промежутки и разбить эти промежутки по индексам

Вот данные

0   0   65.5000 65.5000 65.5000 65.5000 DD  1   125 65.500000   2016-01-04 13:15:00
1   1   65.2100 65.2100 65.2000 65.2100 DD  6   730 65.207260   2016-01-04 13:45:00
2   2   65.2000 65.2100 65.2000 65.2100 DD  10  2100    65.200950   2016-01-04 14:00:00
3   3   65.2000 65.2100 65.2000 65.2100 DD  3   400 65.205000   2016-01-04 14:15:00
4   4   64.4299 65.3100 64.4299 65.3100 DD  1201    213611  64.984270   2016-01-04 14:30:00
5   5   64.1250 64.4700 64.0800 64.4000 DD  1435    214890  64.347840   2016-01-04 14:45:00
6   6   64.1500 64.2000 63.9000 64.1000 DD  1626    179190  64.041176   2016-01-04 15:00:00
7   7   64.1800 64.3500 64.0400 64.1700 DD  2099    197817  64.184620   2016-01-04 15:15:00
8   8   64.1300 64.2200 63.9900 64.1800 DD  1222    185094  64.102510   2016-01-04 15:30:00
9   9   63.6900 64.1300 63.6550 64.1300 DD  1393    145408  63.889503   2016-01-04 15:45:00
10  10  63.6800 63.7900 63.5200 63.6900 DD  1695    140954  63.637432   2016-01-04 16:00:00
11  11  63.8150 63.8300 63.5620 63.6800 DD  1577    153853  63.657430   2016-01-04 16:15:00
12  12  63.7200 63.9100 63.7020 63.8000 DD  1307    123804  63.794487   2016-01-04 16:30:00
13  13  63.6600 63.7500 63.5700 63.7250 DD  1759    209620  63.645393   2016-01-04 16:45:00
14  14  63.5300 63.7300 63.5200 63.6500 DD  1400    201250  63.608864   2016-01-04 17:00:00
15  15  63.6040 63.6500 63.4500 63.5200 DD  1014    109951  63.530740   2016-01-04 17:15:00
16  16  63.7875 63.8200 63.5000 63.6100 DD  1185    130854  63.667430   2016-01-04 17:30:00
17  17  63.7100 63.8300 63.6600 63.7850 DD  1345    154988  63.721010   2016-01-04 17:45:00
18  18  63.9200 63.9600 63.6800 63.7100 DD  1045    138443  63.824345   2016-01-04 18:00:00
19  19  63.7900 63.9700 63.6735 63.9100 DD  812 78165   63.824318   2016-01-04 18:15:00

вот код

model = pd.read_csv("DD.csv", skiprows=None)
model['date'] = model['date'].apply(lambda x: pd.Timestamp(x))
model.head(30)
model['period'] = model.apply(lambda x: "%d"%(int(x[0].minute) + 1))


Но я получаю ошибку

я сделал тестовую выборку времени и там все работает(каждые 10 минут меняется индекс)

index = pd.date_range(datetime.datetime.now().date() - datetime.timedelta(10), periods=100, freq='min')
a = pd.DataFrame(index)
a['period'] = a.apply(lambda x: "%d"%(int(x[0].minute/10) + 1), axis=1)
a.head(30)

Вывод

0   2022-06-10 00:00:00 1
1   2022-06-10 00:01:00 1
2   2022-06-10 00:02:00 1
3   2022-06-10 00:03:00 1
4   2022-06-10 00:04:00 1
5   2022-06-10 00:05:00 1
6   2022-06-10 00:06:00 1
7   2022-06-10 00:07:00 1
8   2022-06-10 00:08:00 1
9   2022-06-10 00:09:00 1
10  2022-06-10 00:10:00 2
11  2022-06-10 00:11:00 2
12  2022-06-10 00:12:00 2
13  2022-06-10 00:13:00 2
14  2022-06-10 00:14:00 2
15  2022-06-10 00:15:00 2
16  2022-06-10 00:16:00 2
17  2022-06-10 00:17:00 2
18  2022-06-10 00:18:00 2
19  2022-06-10 00:19:00 2
20  2022-06-10 00:20:00 3
21  2022-06-10 00:21:00 3
22  2022-06-10 00:22:00 3
23  2022-06-10 00:23:00 3
24  2022-06-10 00:24:00 3
25  2022-06-10 00:25:00 3
26  2022-06-10 00:26:00 3
27  2022-06-10 00:27:00 3
28  2022-06-10 00:28:00 3
29  2022-06-10 00:29:00 3

В чем может быть проблема ?


Ответы (1 шт):

Автор решения: strawdog

Вот если взять ваш пример в вопросе, то сделать можно так:

import pandas as pd
# 8 - это ваш столбец с датами
df = pd.read_csv("5.csv", header=None, parse_dates=[8])
df=df.set_index(8)
# делаем ресамплинг в 1 час ('1H') для наглядности. 
df["idx"] = df.groupby([pd.Grouper(freq='1H')]).ngroup()
df = df.reset_index()

получаем df:

                     8        0      1        2  ...     5       6          7  idx
0  2016-01-04 13:15:00  65.5000  65.50  65.5000  ...     1     125  65.500000    0
1  2016-01-04 13:45:00  65.2100  65.21  65.2000  ...     6     730  65.207260    0
2  2016-01-04 14:00:00  65.2000  65.21  65.2000  ...    10    2100  65.200950    1
3  2016-01-04 14:15:00  65.2000  65.21  65.2000  ...     3     400  65.205000    1
4  2016-01-04 14:30:00  64.4299  65.31  64.4299  ...  1201  213611  64.984270    1
5  2016-01-04 14:45:00  64.1250  64.47  64.0800  ...  1435  214890  64.347840    1
6  2016-01-04 15:00:00  64.1500  64.20  63.9000  ...  1626  179190  64.041176    2
7  2016-01-04 15:15:00  64.1800  64.35  64.0400  ...  2099  197817  64.184620    2
8  2016-01-04 15:30:00  64.1300  64.22  63.9900  ...  1222  185094  64.102510    2
9  2016-01-04 15:45:00  63.6900  64.13  63.6550  ...  1393  145408  63.889503    2
10 2016-01-04 16:00:00  63.6800  63.79  63.5200  ...  1695  140954  63.637432    3
11 2016-01-04 16:15:00  63.8150  63.83  63.5620  ...  1577  153853  63.657430    3
12 2016-01-04 16:30:00  63.7200  63.91  63.7020  ...  1307  123804  63.794487    3
13 2016-01-04 16:45:00  63.6600  63.75  63.5700  ...  1759  209620  63.645393    3
14 2016-01-04 17:00:00  63.5300  63.73  63.5200  ...  1400  201250  63.608864    4
15 2016-01-04 17:15:00  63.6040  63.65  63.4500  ...  1014  109951  63.530740    4
16 2016-01-04 17:30:00  63.7875  63.82  63.5000  ...  1185  130854  63.667430    4
17 2016-01-04 17:45:00  63.7100  63.83  63.6600  ...  1345  154988  63.721010    4
18 2016-01-04 18:00:00  63.9200  63.96  63.6800  ...  1045  138443  63.824345    5
19 2016-01-04 18:15:00  63.7900  63.97  63.6735  ...   812   78165  63.824318    5

→ Ссылка