Изменение индексов временных промежутков
Есть 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