Вычисление z-показателя нескольких групп в кадре данных - PullRequest
0 голосов
/ 09 февраля 2019

Для фрейма данных в Python (см. Ниже) я хотел бы вычислить z-показатель S, используя среднее значение и стандартное отклонение группы G, к которой принадлежит элемент S, то есть для s из Sпринадлежность к группе g из G

s_z = (s - mu(g))/sigma(g).

Какой самый элегантный способ сделать это?

    G         S         
0   B  0.444939  
1   D  0.407554  
2   C  0.460148  
3   B  0.465239  
4   A  0.462691  
5   A  0.016545  
6   D  0.850445  
7   C  0.817744  
8   B  0.777962  
9   C  0.757983  
10  C  0.934829  

1 Ответ

0 голосов
/ 09 февраля 2019

Я думаю, вам нужно groupby с лямбда-функцией - с mean и std или проходом scipy.stats.zscore, только необходимые изменения по умолчанию ddof:

from  scipy.stats import zscore

df['s_z'] = df.groupby('G')['S'].transform(lambda x: (x-x.mean())/x.std())
df['s_z1'] = df.groupby('G')['S'].transform(lambda x: zscore(x, ddof=1))
print (df)
    G         S       s_z      s_z1
0   B  0.444939 -0.630865 -0.630865
1   D  0.407554 -0.707107 -0.707107
2   C  0.460148 -1.397499 -1.397499
3   B  0.465239 -0.522127 -0.522127
4   A  0.462691  0.707107  0.707107
5   A  0.016545 -0.707107 -0.707107
6   D  0.850445  0.707107  0.707107
7   C  0.817744  0.371317  0.371317
8   B  0.777962  1.152993  1.152993
9   C  0.757983  0.075715  0.075715
10  C  0.934829  0.950467  0.950467
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...