Python pandas使用另一个变量

时间:2018-06-01 01:56:17

标签: python pandas dataframe missing-data

我希望用另一列的值模式填充一列的缺失值。假设这是我们的数据集(借用Chris Albon):

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',因为有两个Jake的值为'm'。如果有一个值为'f'的Jake,它仍会选择'm'作为模式值,因为2>如果能做的话会很好:

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

我查看了value_counts并申请但未找到此具体案例。我的最终目标是能够查看一列,如果没有模式值,则查看另一列的模式值。

1 个答案:

答案 0 :(得分:1)

您需要使用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