次のデータセットがあるとします
コード | カテゴリー | エネルギー | 砂糖 | タンパク質 | |
---|---|---|---|---|---|
0 | 01 | B | 936 | NaN | 7.8 |
1 | 02 | NaN | NaN | 15.0 | NaN |
2 | 03 | あ | 1569.0 | 23 | 4.1 |
3 | 04 | NaN | 826 | NaN | 3 |
4 | 05 | B | 1345 | 22 | 5.1 |
5 | 06 | あ | 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 | あ | 1569.0 | 23 | 4.1 |
12 | 105 | C | 813 | NaN | 3.5 |
column を考慮してSimpleImputerで代入を行いたいと思いますcategory
。
つまり、製品の を考慮して平均を割り当てたいと思いcategory
ます。
商品にカテゴリがない場合は、カテゴリのない商品の平均を考えたいと思いますcategory
。
code
では、 01の砂糖を完成させます。Bsugars
を持つすべての製品のみを検討します。category
コード | カテゴリー | エネルギー | 砂糖 | タンパク質 | |
---|---|---|---|---|---|
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)