Панды - замена нулей на наиболее частые значения в группах - PullRequest
2 голосов
/ 19 октября 2019

У меня есть набор данных, содержащий следующие столбцы:

['sex', 'age', 'relationship_status]

В столбце "relations_status" есть некоторые значения NaN, и я хочу заменить их на наиболее распространенное значение в каждой группе в зависимости от возраста и пола. ,

Я знаю, как сгруппировать и посчитать значения:

df2.groupby(['age','sex'])['relationship_status'].value_counts()

, и он возвращает:

age   sex     relationship_status
17.0  female  Married with kids       1
18.0  female  In relationship         5
              Married                 4
              Single                  4
              Married with kids       2
      male    In relationship         9
              Single                  5
              Married                 4
              Married with kids       4
              Divorced                3
.
.
.

86.0  female  In relationship         1
92.0  male    Married                 1
97.0  male    In relationship         1

Итак, еще раз, что мне нужно достичь, это всякий раз, когда "отношение_статус "пусто Мне нужна программа, чтобы заменить ее наиболее часто встречающимся значением, основанным на возрасте и поле.

Кто-нибудь может подсказать, как мне это сделать?

С уважением.

Ответы [ 2 ]

1 голос
/ 19 октября 2019

Примерно так:

mode = df2.groupby(['age','sex'])['relationship_status'].agg(lambda x: pd.Series.mode(x)[0])
df2['relationship_status'].fillna(mode, inplace=True)
0 голосов
/ 19 октября 2019

Установите этот флажок, он возвращает 'ALL_NAN', когда в пределах (возраст, пол) подгруппами являются только nans:

import pandas as pd

df = pd.DataFrame(
        {'age': [25, 25, 25, 25, 25, 25,],
         'sex': ['F', 'F', 'F', 'M', 'M', 'M', ],
         'status': ['married', np.nan, 'married', np.nan, np.nan, 'single']
        })


df.loc[df['status'].isna(), 'status'] = df.groupby(['age','sex'])['status'].transform(lambda x: x.mode()[0] if any(x.mode()) else 'ALL_NAN')

Вывод:

   age sex   status
0   25   F  married
1   25   F  married
2   25   F  married
3   25   M   single
4   25   M   single
5   25   M   single
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...