Сократить время цикла в питоне - PullRequest
0 голосов
/ 23 декабря 2018

Циклы в python занимают много времени, чтобы дать результат. Он содержит около 100 тыс. Записей.

Это занимает много времени.Как можно сократить время

df['loan_agr'] = df['loan_agr'].astype(int)

for i in range(len(df)):

    if df.loc[i,'order_mt']== df.loc[i,'enr_mt']:

        df['new_N_Loan'] = 1

        df['exist_N_Loan'] = 0

        df['new_V_Loan'] = df['loan_agr']

        df['exist_V_Loan'] = 0

    else:        

        df['new_N_Loan'] = 0

        df['exist_N_Loan'] = 1

        df['new_V_Loan'] = 0

        df['exist_V_Loan'] = df['loan_agr']

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Вместо диапазона (Len (...)) вы можете изменить функцию len на значение.

0 голосов
/ 23 декабря 2018

Вы можете использовать loc и устанавливать новые значения векторизованным способом.Этот подход намного быстрее, чем использование итерации, поскольку эти операции выполняются сразу для целых столбцов, а не для отдельных значений.Проверьте эту статью , чтобы узнать больше об оптимизации скорости в пандах.

Например:

mask = df['order_mt'] == df['enr_mt']
df.loc[mask, ['new_N_Loan', 'exist_N_Loan', 'exist_V_Loan']] = [1, 0, 0]
df.loc[mask, ['new_V_Loan']] = df['loan_agr']

df.loc[~mask, ['new_N_Loan', 'exist_N_Loan', 'new_V_Loan']] = [0, 1, 0]
df.loc[~mask, ['exist_V_Loan']] = df['loan_agr']

Редактировать:

Если оператор ~ (поразрядно не) не поддерживается в вашей версии панд, вы можете создать новую маску для условия «else», аналогично первому условию.

Например:

mask = df['order_mt'] == df['enr_mt']
else_mask = df['order_mt'] != df['enr_mt']

Затем используйте else_mask для второго набора определений вместо ~mask.

Образец:

Ввод:

   order_mt  enr_mt new_N_Loan exist_N_Loan exist_V_Loan new_V_Loan  loan_agr
0         1       1       None         None         None       None       100
1         2       2       None         None         None       None       200
2         3      30       None         None         None       None       300
3         4      40       None         None         None       None       400

Выход:

   order_mt  enr_mt  new_N_Loan  exist_N_Loan  exist_V_Loan  new_V_Loan  loan_agr
0         1       1           1             0             0         100       100
1         2       2           1             0             0         200       200
2         3      30           0             1           300           0       300
3         4      40           0             1           400           0       400
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...