sfa*_*tor 9 python missing-data pandas imputation
我有一个数据集将丢失一些看起来像这样的数据:
id category value
1 A NaN
2 B NaN
3 A 10.5
4 C NaN
5 A 2.0
6 B 1.0
Run Code Online (Sandbox Code Playgroud)
我需要填写空值来使用模型中的数据.每次类别第一次出现时,它都是NULL.我想要的方法是对类似的情况A
和B
具有多个值的情况用该类别的平均值替换空值.对于C
仅出现一次的类别,只需填写其余数据的平均值即可.
我知道我可以简单地执行此操作C
以获得所有行的平均值,但我仍然试图为A和B执行分类方法并替换空值.
df['value'] = df['value'].fillna(df['value'].mean())
Run Code Online (Sandbox Code Playgroud)
我需要最终的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
Run Code Online (Sandbox Code Playgroud)
我想你可以使用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
Run Code Online (Sandbox Code Playgroud)
您还可以使用GroupBy
+transform
以NaN
分组方式填充值。这种方法避免了效率低下的apply
+ lambda
。例如:
df['value'] = df['value'].fillna(df.groupby('category')['value'].transform('mean'))
df['value'] = df['value'].fillna(df['value'].mean())
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5925 次 |
最近记录: |