Я хочу сократить время этой тройной вложенности для -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
Конечно, это должно быть сделано без особых усилий, потому что векторы огромны.
Как я могу сделать это проще?