Как найти пересечение чисел?
Есть 8 строк, разделённые на столбцы: index, Open Time, Open, Close, изменение, zone_start, zone_end.
Последовательности четырёх строк разделены на зоны : жёлтую и зелёную. Начало и конец зоны обозначены значениями 'start' и 'end' в соответствующих столбцах. Зелёная зона всегда ниже жёлтой. Между зонами могут быть строки.
Как определить пересечение значений зелёной зоны с жёлтой ? Под пересечением понимается определения диапазона минимального значения поля open и максимального значения close, если в поле "изменение" 'увеличение' или определения диапазона максимального значения поля open и минимального значения close, если в поле "изменение" 'уменьшение'.
Open Time Open Close изменение zone_start zone_end zone_end
1 2022-04-25 18:05:00+03:00 39344.67 39413.84 увеличение start
2 2022-04-25 18:10:00+03:00 39413.84 39409.97 nan
3 2022-04-25 18:15:00+03:00 39409.98 39438.9 nan
4 2022-04-25 18:20:00+03:00 39438.9 39454.49 nan end
5 2022-04-25 18:25:00+03:00 39454.49 39508.14 nan
6 2022-04-25 18:30:00+03:00 39508.14 39543.22 nan
7 2022-04-25 18:35:00+03:00 39543.22 39570.0 nan
8 2022-04-25 18:40:00+03:00 39570.01 39575.25 nan
9 2022-04-25 18:45:00+03:00 39575.25 40193.41 уменьшение start
10 2022-04-25 18:50:00+03:00 40193.41 40239.75 nan
11 2022-04-25 18:55:00+03:00 40239.74 39887.03 nan
12 2022-04-25 19:00:00+03:00 39887.04 39886.76 nan end
Open Time Open Close изменение zone_start zone_end
5 2022-04-25 09:10:00+03:00 38474.82 38388.24 nan
6 2022-04-25 09:15:00+03:00 38388.24 38325.0 увеличение start
7 2022-04-25 09:20:00+03:00 38324.99 38301.07 nan
8 2022-04-25 09:25:00+03:00 38301.07 38356.81 nan
9 2022-04-25 09:30:00+03:00 38356.81 38519.34 nan end
10 2022-04-25 09:35:00+03:00 38519.33 38524.38 nan
11 2022-04-25 09:40:00+03:00 38524.39 38595.45 nan
12 2022-04-25 09:45:00+03:00 38595.44 38574.84 nan
13 2022-04-25 09:50:00+03:00 38574.84 38580.0 уменьшение start
14 2022-04-25 09:55:00+03:00 38580.0 38588.2 nan
15 2022-04-25 10:00:00+03:00 38588.2 38568.12 nan
16 2022-04-25 10:05:00+03:00 38568.13 38518.48 nan end
17 2022-04-25 10:10:00+03:00 38518.48 38495.03 nan
18 2022-04-25 10:15:00+03:00 38495.02 38513.51 nan
19 2022-04-25 10:20:00+03:00 38513.5 38511.94 nan
20 2022-04-25 10:25:00+03:00 38511.93 38506.55 nan
21 2022-04-25 10:30:00+03:00 38506.56 38477.68 увеличение start
22 2022-04-25 10:35:00+03:00 38477.68 38453.72 nan
23 2022-04-25 10:40:00+03:00 38453.72 38473.81 nan
24 2022-04-25 10:45:00+03:00 38473.8 38505.16 nan
Ответы (1 шт):
Довольно путанное задание, создается впечатление, что нужно оптимизировать данные на более раннем этапе. По крайней мере, выделить группы можно так:
res = []
for i, g in df.fillna(method="ffill", limit=3).dropna(subset=["изменение"]).groupby("изменение"):
res.append([g.iloc[0, -3], g.Open.max(), g.Open.min(), g.Close.max(), g.Close.min()])
print(res)
[['увеличение', 38802.64, 38737.46, 38810.79, 38737.46], ['уменьшение', 38812.25, 38798.86, 38812.26, 38710.0]]
Здесь будет список списков с наименованием тенденции, максимумом и минимумом открытия и максимумом и минимумом закрытия. Зоны будут идти последовательно парами, оазумеется, в не зависимости от их количества и "ненужных" строк между ними.
