Применить z-оценку ко всем атрибутам по стране - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь очистить набор данных, в котором есть данные по каждой стране мира за 2000-2015 годы. Данные по населению по годам довольно плохие - я хочу назначить z-оценки для данных по каждой стране по годам, чтобы я мог видеть, какие данные отбрасываются как выбросы. Как бы я это сделал? Я думаю, что мне нужно использовать groupby (), но я не уверен, как его развернуть.

Я работаю с этим набором данных ВОЗ Kaggle: https://www.kaggle.com/kumarajarshi/life-expectancy-who/data#

Данные обычно выглядят так:

Пример

1 Ответ

0 голосов
/ 03 апреля 2020

Может быть, что-то подобное может сработать -

import numpy as np, pandas as pd
l1 = ['a'] * 5 + ['b'] * 10 + ['c'] * 8
l2 = list(np.random.randint(10,20,size=5)) + list(np.random.randint(100,150, size=10)) + list(np.random.randint(75,100, size=8))
df = pd.DataFrame({'cat':l1, 'values':l2}) #creating a dummy dataframe
df
    cat  values
0    a      18
1    a      17
2    a      11
3    a      13
4    a      11
5    b     102
6    b     103
7    b     119
8    b     113
9    b     100
10   b     113
11   b     102
12   b     108
13   b     128
14   b     126
15   c      75
16   c      96
17   c      81
18   c      90
19   c      80
20   c      95
21   c      96
22   c      86

df['z-score'] = df.groupby(['cat'])['values'].apply(lambda x: (x - x.mean())/x.std())
df

     cat  values   z-score
0    a      18     1.206045
1    a      17     0.904534
2    a      11    -0.904534
3    a      13    -0.301511
4    a      11    -0.904534
5    b     102    -0.919587
6    b     103    -0.821759
7    b     119     0.743496
8    b     113     0.156525
9    b     100    -1.115244
10   b     113     0.156525
11   b     102    -0.919587
12   b     108    -0.332617
13   b     128     1.623951
14   b     126     1.428295
15   c      75    -1.520176
16   c      96     1.059516
17   c      81    -0.783121
18   c      90     0.322461
19   c      80    -0.905963
20   c      95     0.936674
21   c      96     1.059516
22   c      86    -0.168908
...