Нормализация Z-показателя в pandas фрейме данных (python) - PullRequest
0 голосов
/ 09 января 2020

Я использую python3 (spyder), и у меня есть таблица, которая является типом объекта "pandas .core.frame.DataFrame". Я хочу, чтобы z-счёт нормализовал значения в этой таблице (чтобы каждое значение вычитало среднее значение его строки и делилось на sd его строки), чтобы каждая строка имела среднее значение = 0 и sd = 1. Я попробовал 2 подхода.

Первый подход

from scipy.stats import zscore
zetascore_table=zscore(table,axis=1)

Второй подход

rows=table.index.values
columns=table.columns
import numpy as np
for i in range(len(rows)):
    for j in range(len(columns)):
         table.loc[rows[i],columns[j]]=(table.loc[rows[i],columns[j]] - np.mean(table.loc[rows[i],]))/np.std(table.loc[rows[i],])
table

Кажется, что оба подхода работают, но когда я проверяю среднее и sd каждой строки, это не 0 и 1, как предполагается, но другие значения с плавающей запятой. Я не знаю, в чем может быть проблема.

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 10 января 2020

Извините, подумав об этом, я нашел себе другой более простой способ вычисления z-показателя (вычесть среднее значение каждой строки и разделить результат на sd строки), чем циклы for:

table=table.T# need to transpose it since the functions work like that 
sd=np.std(table)
mean=np.mean(table)
numerator=table-mean #numerator in the formula for z-score 
z_score=numerator/sd
z_norm_table=z_score.T #we transpose again and we have the initial table but with all the 
#values z-scored by row. 

Я проверил, и теперь среднее значение в каждой строке равно 0 или очень близко к 0, а sd равно 1 или очень близко к 1, так что это сработало для меня. Извините, у меня мало опыта в программировании, и иногда простые вещи требуют много испытаний, пока я не пойму, как их решить.

...