Python pandas 用另一个变量的众数填充一个变量的缺失值
Python pandas fill in missing value of one variable with the mode of another variable
我想用另一列值的模式来填充一列的缺失值。假设这是我们的数据集(借自 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 > 1。如果你能这样做就好了:
df["sex"].fillna(df.groupby("first_name")["sex"].transform("mode"), inplace=True)
df
我调查了 value_counts 并申请了,但找不到这个具体案例。我的最终目标是能够查看一列,如果该列没有模式值,则查看另一列的模式值。
你需要用pd.Series.mode
调用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
我想用另一列值的模式来填充一列的缺失值。假设这是我们的数据集(借自 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 > 1。如果你能这样做就好了:
df["sex"].fillna(df.groupby("first_name")["sex"].transform("mode"), inplace=True)
df
我调查了 value_counts 并申请了,但找不到这个具体案例。我的最终目标是能够查看一列,如果该列没有模式值,则查看另一列的模式值。
你需要用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