Prompt Detail:
Из вашего кода сложно понять, что именно вы пытаетесь сделать, но я предположу, что вы пытаетесь создать словарь main
, который содержит список значений listok
для каждой улицы из столбца df7['street']
. Значения listok
равны 1, если дата в столбце df7['date']
попадает в определенный диапазон дат в date_range['date']
.
Если это так, то есть несколько возможных способов оптимизировать ваш код:
Используйте векторизацию, чтобы избежать использования циклов. Вместо того, чтобы перебирать даты в каждой строке, вы можете использовать метод
numpy.digitize
, чтобы найти индекс соответствующего диапазона дат для каждой даты в столбцеdf7['date']
. Это может быть гораздо более эффективным, чем перебор всех дат в каждой строке.Разбейте
df7
на группы по улицам и обработайте каждую группу отдельно. Это может уменьшить объем памяти, необходимый для обработки данных.Разбейте
date_range
на более мелкие части и обработайте каждую часть отдельно. Например, вы можете разбитьdate_range
на 10 частей и обработать каждую часть по отдельности.
Вот пример кода, который использует векторизацию и группировку по улицам:
pythonimport numpy as np
# Преобразуем даты в numpy массивы для использования в numpy.digitize
date_range_arr = np.array(date_range['date'])
df7_date_arr = np.array(df7['date'])
# Найдем индексы соответствующих диапазонов дат для каждой даты в df7_date_arr
bins = np.searchsorted(date_range_arr, df7_date_arr, side='right')
bins[bins == len(date_range)] = len(date_range) - 1
# Сгруппируем df7 по улицам
df7_grouped = df7.groupby('street')
# Создадим словарь main, содержащий список значений для каждой улицы
main = {}
for street, group in df7_grouped:
# Создадим список listok для текущей улицы
listok = np.zeros(len(date_range))
for b in bins[group.index]:
listok[b-1] = 1
main[street] = list(listok)
print(main)
Если у вас все еще возникают проблемы с обработкой данных, то вы можете рассмотреть возможность использования более мощного компьютера или использования распределенных вычислений, например, с помощью Apache Spark.