Попытка заполнить медианы значения, основанные на предложении group by, но получающая ValueError - PullRequest
0 голосов
/ 31 января 2020

У меня есть данные, которые выглядят так:

    Location+Type                                       tract     state_abbr year   tract_state_year    County_name     hpi
0   Census Tract 201, Autauga County, Alabama: Sum...   1001020100  AL  2012    1001020100AL2012    Autauga County  134.41
1   Census Tract 201, Autauga County, Alabama: Sum...   1001020100  AL  2013    1001020100AL2013    Autauga County  129.82
2   Census Tract 201, Autauga County, Alabama: Sum...   1001020100  AL  2014    1001020100AL2014    Autauga County  135.34
3   Census Tract 201, Autauga County, Alabama: Sum...   1001020100  AL  2015    1001020100AL2015    Autauga County  134.66
4   Census Tract 201, Autauga County, Alabama: Sum...   1001020100  AL  2016    1001020100AL2016    Autauga County  140.84

Я хочу применить эту формулу:

medians = (df.groupby(['year', 'state_abbr', 'County_name'])['hpi']
             .transform(lambda x: x.median() if x.notnull().any() else np.nan)
          )
df['hpi'] = df['hpi'].fillna(medians)

Но я получаю эту ошибку:

ValueError: Length mismatch: Expected axis has 151291 elements, new values have 152159 elements

Как мне решить эту проблему?

1 Ответ

1 голос
/ 31 января 2020

Похоже, причина, по которой вы пошли по пути лямбда-функции, заключается в том, что вы хотите получить медианы, исключающие нули для каждой группы. Pandas 'Медианная функция на самом деле уже работает таким образом, поэтому вы можете просто написать:

new_hpi = (df
           .groupby(['year', 'state_abbr', 'County_name'])['hpi']
           .transform('median'))

Чтобы теперь можно просто заменить исходный столбец' hpi 'на значения.

df.loc[:, 'hpi'] = new_hpi

Или в одну строку:

df.loc[:, 'hpi'] = (df
                    .groupby(['year', 'state_abbr', 'County_name'])['hpi']
                    .transform('median'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...