Как мы можем объединить все строки после 16:00 одного дня до 10:00 следующего дня в DataFrame, выполнив операции OHL C над сгруппированными строками?
Это преобразует исходный DataFrame из
symbol datetime open high low close date toCombine
0 AAPL 2020-01-01 15:00 3 5 2 4 2020-01-01 False
1 AAPL 2020-01-01 15:30 4 10 4 8 2020-01-01 False
2 AAPL 2020-01-01 16:00 8 15 6 12 2020-01-01 False
3 AAPL 2020-01-01 18:00 12 20 8 16 2020-01-01 True
4 AAPL 2020-01-01 20:00 12 20 8 16 2020-01-01 True
5 AAPL 2020-01-02 07:00 15 24 9 19 2020-01-02 True
6 AAPL 2020-01-02 10:00 16 25 10 20 2020-01-02 True
7 AAPL 2020-01-02 12:00 20 30 12 24 2020-01-02 False
8 AAPL 2020-01-02 14:00 24 70 14 26 2020-01-02 False
9 AAPL 2020-01-02 16:00 103 105 102 104 2020-01-02 False
10 AAPL 2020-01-02 18:00 104 100 104 196 2020-01-02 True
11 AAPL 2020-01-03 08:00 108 110 106 112 2020-01-03 True
12 AAPL 2020-01-03 10:30 112 120 108 116 2020-01-03 False
13 AAPL 2020-01-03 13:00 115 124 109 119 2020-01-03 False
до (игнорируя значения индекса здесь) :
symbol datetime open high low close date
0 AAPL 2020-01-01 15:00 3 5 2 4 2020-01-01
1 AAPL 2020-01-01 15:30 4 10 4 8 2020-01-01
2 AAPL 2020-01-01 16:00 8 15 6 12 2020-01-01
6 AAPL 2020-01-02 10:00 12 25 8 20 2020-01-02 <---- aggregated row
7 AAPL 2020-01-02 12:00 20 30 12 24 2020-01-02
8 AAPL 2020-01-02 14:00 24 70 14 26 2020-01-02
9 AAPL 2020-01-02 16:00 103 105 102 104 2020-01-02
11 AAPL 2020-01-03 10:00 103 110 100 112 2020-01-03 <---- aggregated 10:00 row created if not exist
12 AAPL 2020-01-03 10:30 112 120 108 116 2020-01-03
13 AAPL 2020-01-03 13:00 115 124 109 119 2020-01-03
Примечания:
toCombine
Столбец уже был создан для маркировки строк, которые будут объединены в одну строку со значением datetime
со временем 10:00
.
Если строка с datetime
значение со временем 10:00
не существует, его следует создать. Однако, если также нет строк с toCombine == True
для агрегации, то не нужно создавать строку 10:00
.
Спасибо!
Python Код для настройки проблемы
import pandas as pd
data = [
('AAPL', '2020-01-01 15:00', 3, 5, 2, 4, '2020-01-01', False),
('AAPL', '2020-01-01 15:30', 4, 10, 4, 8, '2020-01-01', False),
('AAPL', '2020-01-01 16:00', 8, 15, 6, 12, '2020-01-01', False),
('AAPL', '2020-01-01 18:00', 12, 20, 8, 16, '2020-01-01', True),
('AAPL', '2020-01-01 20:00', 12, 20, 8, 16, '2020-01-01', True),
('AAPL', '2020-01-02 07:00', 15, 24, 9, 19, '2020-01-02', True),
('AAPL', '2020-01-02 10:00', 16, 25, 10, 20, '2020-01-02', True),
('AAPL', '2020-01-02 12:00', 20, 30, 12, 24, '2020-01-02', False),
('AAPL', '2020-01-02 14:00', 24, 70, 14, 26, '2020-01-02', False),
('AAPL', '2020-01-02 16:00', 103, 105, 102, 104, '2020-01-02', False),
('AAPL', '2020-01-02 18:00', 104, 100, 104, 196, '2020-01-02', True),
('AAPL', '2020-01-03 08:00', 108, 110, 106, 112, '2020-01-03', True),
('AAPL', '2020-01-03 10:30', 112, 120, 108, 116, '2020-01-03', False),
('AAPL', '2020-01-03 13:00', 115, 124, 109, 119, '2020-01-03', False),
]
df = pd.DataFrame(data, columns=['symbol', 'datetime', 'open', 'high', 'low', 'close', 'date', 'toCombine'])
print(df)