Python: более быстрая нормализация

Я хочу нормализовать столбец температуры окружающей среды (Ta).
Вот мой код:

df['Ta'] = df['Ta'].apply(lambda v: (v - df['Ta'].min())) / (df['Ta'].max() - df['Ta'].min())

Это работает хорошо. Но это очень медленно. Размер файла составляет 20 МБ в формате (300000, 8).

Есть ли другое более быстрое решение для этого?


person k.ko3n    schedule 15.07.2019    source источник
comment
Может быть, вы можете кэшировать df['Ta'].min() и df['Ta'].max() в переменных вместо пересчета каждый раз, когда вызывается лямбда?   -  person Anthony Kong    schedule 16.07.2019
comment
на самом деле у вас есть константы: df['Ta'], (df['Ta'].max() - df['Ta'].min()), df['Ta'].min() и не изменяйте содержимое df['Ta'] , сделайте other_array = df_ta.apply...   -  person user8426627    schedule 16.07.2019
comment
Спасибо. Я не уверен, как это реализовать. Следующее верно для небольших данных и быстро работает с большими данными. Но не уверен, что это верное решение. df['Ta'] = (df['Ta'] - df['Ta'].min()) / (df['Ta'].max() - df['Ta'].min())   -  person k.ko3n    schedule 16.07.2019


Ответы (2)


Поскольку вы не используете преимущества pandas , примените здесь другую схему цикла for , которая замедлит весь процесс.

 import pandas as pd ; import numpy as np

 df['Ta']- df['Ta'].min() / np.ptp(df['Ta']))
person BENY    schedule 16.07.2019

Я не уверен, будет ли более быстрый способ:

mx = df['Ta'].max()
mn = df['Ta'].min()

df['Ta'] -=mn
df['Ta']/=(mx-mn) 
person Parijat Bhatt    schedule 15.07.2019