Prompt Title: Optimizing data processing.

Created 1 year ago
Votes 0
Views 99 times
0

Prompt Detail:

Из вашего кода сложно понять, что именно вы пытаетесь сделать, но я предположу, что вы пытаетесь создать словарь main, который содержит список значений listok для каждой улицы из столбца df7['street']. Значения listok равны 1, если дата в столбце df7['date'] попадает в определенный диапазон дат в date_range['date'].

Если это так, то есть несколько возможных способов оптимизировать ваш код:

  1. Используйте векторизацию, чтобы избежать использования циклов. Вместо того, чтобы перебирать даты в каждой строке, вы можете использовать метод numpy.digitize, чтобы найти индекс соответствующего диапазона дат для каждой даты в столбце df7['date']. Это может быть гораздо более эффективным, чем перебор всех дат в каждой строке.

  2. Разбейте df7 на группы по улицам и обработайте каждую группу отдельно. Это может уменьшить объем памяти, необходимый для обработки данных.

  3. Разбейте date_range на более мелкие части и обработайте каждую часть отдельно. Например, вы можете разбить date_range на 10 частей и обработать каждую часть по отдельности.

Вот пример кода, который использует векторизацию и группировку по улицам:

python
import 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.

avatar
max
Shared 5 prompts
Created 1 year ago

Leave a Comment