Эффективный способ перебирать строки и применять преобразования - PullRequest
1 голос
/ 30 апреля 2019

Я ищу более эффективный способ выполнить проверку, а затем применить преобразования, если это необходимо.

Вот мой текущий код

for i in tqdm(df.index):
    if df.loc[i,'WHP Total Acres'] > df.loc[i,'GIS_ACRES']:
        conv_factor = (df.loc[i,'GIS_ACRES'])/(df.loc[i,'WHP Total Acres'])
        df.loc[i,'Very Low'] = df.loc[i,'Very Low'] * conv_factor
        df.loc[i,'Low'] = df.loc[i,'Low'] * conv_factor
        df.loc[i,'Moderate'] = df.loc[i,'Moderate'] * conv_factor
        df.loc[i,'High'] = df.loc[i,'High'] * conv_factor
        df.loc[i,'Very High'] = df.loc[i,'Very High'] * conv_factor
    else:
        df.loc[i, 'WHP Total Acres'] = df.loc[i,'WHP Total Acres']

Чтобы выполнить итерации по 350 тыс. Записей, этозаняло около 2 часов на моей машине.Я уверен, что должен быть более эффективный способ.Заранее спасибо.

1 Ответ

0 голосов
/ 01 мая 2019
df['conv_factor'] = 1
df.loc[df['WHP Total Acres'] > df['GIS_ACRES'],'conv_factor'] = df['GIS_ACRES']/df['WHP Total Acres']

df['Very Low'] = df['conv_factor'] * df['Very Low']
.
.
.

Создание вспомогательного столбца для conv_factor и последующее умножение должны получить результат.

Просто используйте loc, чтобы затем изменить требуемые значения.

...