Вставка пропущенных полей в кадр данных pandas с дублированными индексами
У меня есть похожая проблема для ссылки.
Решения там, кажется, не работают в моем конкретном случае. Я думаю, что это потому, что размер данных.
У меня есть размер файла (2 018 901 - 6) и список длиной 2 083 656. Цель списка (как в ссылке выше) состоит в том, чтобы вставить недостающие временные интервалы в оригинальную df.
Я попробовал принятое решение по ссылке, но программы продолжают работать бесконечно. Второе решение, т. Е.
df.merge(how='right', on='A', right = pd.DataFrame({'A':my_list})).sort(columns='A').reset_index().drop(['index'], axis=1)
Выдает эту ошибку:
***MemoryError:
Чтобы дать некоторое представление о моей проблеме, у меня есть рыночные клиринговые цены, хранящиеся в df. Для каждого временного интервала (ts) -1 в час - 24 открытых торговых сессии, соответствующих следующим 24 часам. По некоторым тс рынок может не очиститься и поэтому у меня разрыв.
Например, скажем, в настоящий момент это ts 1. На данный момент открыты следующие 24 ts (от ts 2 до ts 25). При текущем ts 2, открытые ts будут от 3 до 26 и так далее. Таким образом, в данных у меня есть строка для каждого TS (кстати, также повторяется TS). Когда при некоторых значениях не было очистки, происходит скачок данных.
Я хочу заполнить пробелы с
my_list
Это потому, что я продолжаю обрабатывать данные с другими источниками без каких-либо пробелов в любой TS.
Это кусок df:
A 1 2 bin bin_t1 bin_dum
89 381.0 0.6 153.8 11 7 7.0
90 382.0 0.5 59.4 7 7 7.0
91 383.0 0.5 53.4 7 6 6.0
92 384.0 0.4 45.9 6 6 6.0
93 385.0 0.4 46.5 6 6 6.0
94 386.0 0.3 45.4 6 6 6.0
95 387.0 740.8 34.1 6 5 5.0
96 365.0 0.1 2.4 5 5 5.0
97 366.0 0.1 0.5 5 6 6.0
98 388.0 732.8 38.5 6 5 5.0
99 366.0 1.7 2.7 5 5 5.0
Колонка А обозначает открытую тс. Существует переход со строки 97 на 98, то есть с 366 до 388. Таким образом, в my_list у меня есть полная последовательность, с пропущенными символами ts, в данном случае
367 368 369 370 ... 387
Идея состоит в том, чтобы увеличить df, заполнив прерванные последовательности и заполнив остальные столбцы нулями.
Что я пробовал, кроме предыдущей строки кода,
df.set_index('A')
new_index = pd.Index(my_list, name='A')
df.set_index('A').reindex(new_index)
df.set_index('A').reindex(new_index).reset_index()
Этот подход просто продолжает работать.
Форма df и my_list соответственно
[2018901 rows x 6 columns]
[1 row x 2083656 columns]
Как я могу справиться с этим?
Спасибо
РЕДАКТИРОВАТЬ
Исходные данные поступают из нескольких файлов. Чтобы устранить подозрения на размер, я попытался использовать решение, упомянутое ранее, в кадре данных, состоящем из одного файла.
Теперь я получаю эту ошибку, похожую на случай:
*** ValueError: cannot reindex from a duplicate axis
Я не могу избавиться от устранения дублированных значений. Есть ли работа вокруг?
Благодарю.