Панды Python заполняют пропущенное значение одной переменной режимом другой переменной - PullRequest
0 голосов
/ 01 июня 2018

Я ищу заполнить пропущенные значения одного столбца режимом значения из другого столбца.Допустим, это наш набор данных (заимствованный у Криса Албона):

import pandas as pd
import numpy as np

raw_data = {'first_name': ['Jake', 'Jake', 'Tina', 'Jake', 'Amy'], 
        'last_name': ['Miller', 'Smith', 'Ali', 'Milner', 'Cooze'], 
        'age': [42, np.nan, 36, 24, 73], 
        'sex': ['m', np.nan, 'f', 'm', 'f'], 
        'preTestScore': [4, np.nan, np.nan, 2, 3],
        'postTestScore': [25, np.nan, np.nan, 62, 70]}
df = pd.DataFrame(raw_data, columns = ['first_name', 'last_name', 'age', 'sex', 'preTestScore', 'postTestScore'])
df

Я знаю, что мы можем заполнить отсутствующий postTestScore средним значением postTestScore для каждого пола:

df["postTestScore"].fillna(df.groupby("sex")["postTestScore"].transform("mean"), inplace=True) df

Но как бы мы заполнили пропущенный секс значением моды для каждого имени в названии пола (очевидно, это не является политически корректным, но в качестве примера это был простой набор данных для использования).Таким образом, для этого примера недостающее значение пола будет «m», потому что есть два Джейка со значением «m».Если бы был Джейк со значением 'f', он все равно выбрал бы 'm' в качестве значения режима, потому что 2> 1. Было бы хорошо, если бы вы могли сделать:

df["sex"].fillna(df.groupby("first_name")["sex"].transform("mode"), inplace=True) df

Я посмотрел в value_counts и подать заявку, но не смог найти этот конкретный случай.Моя конечная цель состоит в том, чтобы иметь возможность просматривать один столбец и, если у него нет значения режима, тогда искать другой столбец для значения режима.

1 Ответ

0 голосов
/ 01 июня 2018

Вам нужно вызвать функцию режима с помощью pd.Series.mode

df.groupby("first_name")["sex"].transform(pd.Series.mode)
Out[432]: 
0    m
1    m
2    f
3    m
4    f
Name: sex, dtype: object
...