我有一个数据集,其中包含一些丢失的数据,如下所示:
id category value
1 A NaN
2 B NaN
3 A 10.5
4 C NaN
5 A 2.0
6 B 1.0我需要填充空值才能使用模型中的数据。每当一个类别第一次出现时,它就是空的。我想要做的是,对于像类别A和B这样具有多个值的情况,用该类别的平均值替换空值。对于只有一次出现的类别C,只需填写其余数据的平均值。
我知道,对于像C这样的情况,我可以简单地这样做,以获得所有行的平均值,但我在尝试对A和B进行分类平均并替换空值时遇到了困难。
df['value'] = df['value'].fillna(df['value'].mean()) 我需要最终的df是这样的
id category value
1 A 6.25
2 B 1.0
3 A 10.5
4 C 4.15
5 A 2.0
6 B 1.0发布于 2016-10-28 14:15:18
我认为您可以将groupby和apply fillna与mean一起使用。如果某个类别只有NaN值,则获取NaN,因此使用列的所有值的mean填充NaN
df.value = df.groupby('category')['value'].apply(lambda x: x.fillna(x.mean()))
df.value = df.value.fillna(df.value.mean())
print (df)
id category value
0 1 A 6.25
1 2 B 1.00
2 3 A 10.50
3 4 C 4.15
4 5 A 2.00
5 6 B 1.00发布于 2018-08-10 08:15:48
您还可以使用GroupBy + transform来使用NaN均值填充GroupWise值。这种方法避免了低效的apply + lambda。例如:
df['value'] = df['value'].fillna(df.groupby('category')['value'].transform('mean'))
df['value'] = df['value'].fillna(df['value'].mean())https://stackoverflow.com/questions/40299055
复制相似问题