【发布时间】:2021-08-03 12:00:50
【问题描述】:
假设如下数据集
| code | category | energy | sugars | proteins | |
|---|---|---|---|---|---|
| 0 | 01 | B | 936 | NaN | 7.8 |
| 1 | 02 | NaN | NaN | 15.0 | NaN |
| 2 | 03 | A | 1569.0 | 23 | 4.1 |
| 3 | 04 | NaN | 826 | NaN | 3 |
| 4 | 05 | B | 1345 | 22 | 5.1 |
| 5 | 06 | A | NaN | 17 | NaN |
| 6 | 10 | C | 826 | NaN | 3 |
| 7 | 11 | C | 1345 | 26 | 5.1 |
| 8 | 101 | B | NaN | 18 | 6.1 |
| 9 | 102 | B | 636 | NaN | 7.8 |
| 10 | 103 | NaN | NaN | 15.0 | NaN |
| 11 | 104 | A | 1569.0 | 23 | 4.1 |
| 12 | 105 | C | 813 | NaN | 3.5 |
考虑到category 列,我想用SimpleImputer 进行估算。
也就是说,考虑到产品的category,我想分配平均值。
如果产品没有类别,那么,我想考虑没有category的产品的平均值。
所以,完成 code 01 的糖。
我只会考虑所有sugars 的产品category B
| code | category | energy | sugars | proteins | |
|---|---|---|---|---|---|
| 0 | 01 | B | 936 | NaN | 7.8 |
| 4 | 05 | B | 1345 | 22 | 5.1 |
| 8 | 101 | B | NaN | 18 | 6.1 |
| 9 | 102 | B | 636 | NaN | 7.8 |
我做了类似的事情,如下所示。但我需要使用 SimpleImputer。
为了澄清,在下面的例子中,我用列的平均值完成了没有category的NaN。
for col in df.columns:
if df[col].dtypes == "float64":
df.loc[df[col].isna() & df["category"].notnull(), col] = df["categories"].map(df.groupby("category")[col].mean())
df[col].fillna(df[col].mean(), inplace=True)
【问题讨论】:
标签: python pandas scikit-learn imputation