Предположим, у меня есть фрейм данных pandas df
:
Я хочу вычислить среднее значение кадра данных по столбцам.
Это просто:
df.apply(average)
затем диапазон столбцов max (col) - min (col). Это снова просто:
df.apply(max) - df.apply(min)
Теперь для каждого элемента я хочу вычесть среднее значение его столбца и разделить на диапазон его столбца. Я не знаю как это сделать
Любая помощь / указатели приветствуются.
A
иB
являются частью более крупного группирующего фактора, который вы хотите нормализовать отдельно отC
иD
.Если вы не против импорта
sklearn
библиотеки, я бы порекомендовал метод, описанный в этом блоге.источник
np_scaled = min_max_scaler.fit_transform(df.score.astype(float).values.reshape(-1, 1))
Вы можете использовать
apply
для этого, и это немного аккуратнее:Кроме того, он отлично работает
groupby
, если вы выберете соответствующие столбцы:источник
Слегка изменено из: Python Pandas Dataframe: нормализовать данные между 0,01 и 0,99? но из некоторых комментариев подумал, что это актуально (извините, если это считается репостом ...)
Я хотел, чтобы индивидуальная нормализация в этом обычном процентиле данных или z-балла была недостаточной. Иногда я знал, каковы возможные максимумы и минимумы популяции, и поэтому хотел определить их, отличные от моей выборки, или другую среднюю точку, или что-то еще! Это часто может быть полезно для изменения масштаба и нормализации данных для нейронных сетей, где вы можете захотеть, чтобы все входные данные находились в диапазоне от 0 до 1, но некоторые из ваших данных, возможно, потребуется масштабировать более индивидуально ... потому что процентили и стандартные отклонения предполагают, что ваши образцы покрывают населения, но иногда мы знаем, что это неправда. Это также было очень полезно для меня при визуализации данных на тепловых картах. Итак, я создал собственную функцию (использовал дополнительные шаги в коде здесь, чтобы сделать его максимально читаемым):
Это займет серию панд или даже просто список и нормализует его до указанных вами низких, средних и высоких точек. также есть коэффициент усадки! чтобы вы могли уменьшить масштаб данных от конечных точек 0 и 1 (мне пришлось сделать это при объединении цветовых карт в matplotlib: Single pcolormesh с более чем одной цветовой картой с использованием Matplotlib ) Таким образом, вы, вероятно, можете увидеть, как работает код, но в основном говорите, что вы имеют значения [-5,1,10] в выборке, но хотите нормализовать на основе диапазона от -7 до 7 (так что все, что больше 7, наша «10» эффективно обрабатывается как 7) со средней точкой 2, но сожмите его, чтобы уместить цветовую карту 256 RGB:
Он также может вывернуть ваши данные наизнанку ... это может показаться странным, но я нашел его полезным для тепловых карт. Скажем, вам нужен более темный цвет для значений, близких к 0, а не для высоких / низких значений. Вы можете тепловую карту на основе нормализованных данных, где insideout = True:
Итак, теперь "2", ближайшая к центру, определенная как "1", является наивысшим значением.
В любом случае, я думал, что мое приложение актуально, если вы хотите масштабировать данные другими способами, которые могут иметь для вас полезные приложения.
источник
Вот как вы это делаете по столбцам:
источник