缺失数据填充,用平均值填充



我有一个数据集,其中一列对应分类数据,分别是a, B, C, D和E,所有这些类别都对应测试分数,其中一些分数是NaN值。在这种情况下,我想用成绩的平均值来填补每一个缺失的值。如果我可以使用fillna(),这将会容易得多,但是类别都是关于等级的。

我真的很感激你的帮助。

所以我想用某种方式填充这些NaN值,因为它们属于一个组。

如果你有这样的东西

import pandas as pd
import numpy as np
df = pd.DataFrame(
[
[1,'A'],
[2,'B'],
[3,'C'],
[4,np.nan],
[5,'A'],
[6,'B'],
[7,np.nan],
[8,'B'],
[9,'C'],
[10,'D'],
], columns=['id','grade'])

和你的df

id  grade
0   1   A
1   2   B
2   3   C
3   4   NaN
4   5   A
5   6   B
6   7   NaN
7   8   B
8   9   C
9   10  D

如果我们正在寻找出现次数最多的

的等级
df.groupby('grade').size().to_frame()

可以看到频率应该是

0
grade   
A   2
B   3
C   2
D   1

您可以使用mode()通过

查找值
df_mode=df.grade.mode().values[0]
df_mode

则可以用

填充缺失的值
df.grade=df.grade.fillna(df_mode)
df

,结果应该是这样的

id  grade
0   1   A
1   2   B
2   3   C
3   4   B
4   5   A
5   6   B
6   7   B
7   8   B
8   9   C
9   10  D

如果你想用基于分组分类等级的平均值替换这些值,你可以采用多种方法,但这是一种非常简单的方法:

Grade  Score
0    A      95
1    A    NaN
2    B    NaN
3    B      83
4    B      85
5    B      81
6    C      73
7    C    NaN
8    C      75
df.Score = df.groupby("Grade").transform(lambda x: x.fillna(x.mean()))

按分类等级分组,在得分列上迭代,如果是NA,则在该类别的平均值中下降。

这是一个非常简单的方法。

相关内容

  • 没有找到相关文章