Как сократить время в тройном вложении для -l oop в python - PullRequest
0 голосов
/ 10 марта 2020

Я хочу сократить время этой тройной вложенности для -l oop:

dtz = []

for i in range(0, len(Profile)):
    dtz.append(pd.DataFrame(columns=['Strecke', 'Ziel', 'Distanz']))

Columns = ['Strecke', 'Ziel', 'Distanz']
for i in range(0, len(Profile)):
    for col in Columns:
        dtz[i][col] = np.zeros(len(Viertel))

for i in range(0, len(Profile)):
    for j in range(0, len(Fahrstartzeit[i])):
        for k in range(0, len(Viertel)):
            if Viertel[k] >= Fahrstartzeit[i][j] and
                Viertel[k] < Fahrendezeit[i][j]:
                dtz[i]['Strecke'][k-1] = Profile[i]['Strecke'][j]
                dtz[i]['Ziel'][k-1] = Profile[i]['Ziel'][j]

Информация такая. Есть 4.000 «Профилей» (For-l oop -> i), каждый из этих «Профилей» имеет четыре (4) столбца с различной длиной (For-l oop -> j) : «Фарстартзайт», «Фарендезайт», «Штрекке», «Циль». Вектор 'Viertel' (For-l oop -> k) имеет интервалы в 15 минут и является следующим:

Viertel = pd.date_range(start='2012-01-01', end='2012-12-31 23:45:00', freq='15min').to_pydatetime

Поэтому я хочу принять во внимание отправление - 'Fahrstartzeit 'и время прибытия' Fahrendezeit 'каждой поездки и напишите в векторе' Viertel '. Это означает, что если поездка начинается в 07:13 и заканчивается в 8:35, информация Profile[i]['Strecke'][j] в кадре данных dtz[i]['Strecke'][k-1] при выполнении условия. Условие:

if Viertel[k] >= Fahrstartzeit[i][j] and
                    Viertel[k] < Fahrendezeit[i][j]:

Например, если Fahrstartzeit[i][j]=02.01.2012 07:02:00 и Fahrendezeit[i][j]=02.01.2012 08:43:00, то оно будет записано в Profile[i]['Strecke'][j]=dtz[i]['Strecke'][k-1] для всех Viertel[k], которые находятся между этими временами:

Viertel[k]=02.01.2012 07:15:00
Viertel[k]=02.01.2012 07:30:00
Viertel[k]=02.01.2012 07:45:00
Viertel[k]=02.01.2012 08:00:00
Viertel[k]=02.01.2012 08:15:00
Viertel[k]=02.01.2012 08:30:00

Конечно, это должно быть сделано без особых усилий, потому что векторы огромны.

Как я могу сделать это проще?

...