Pandas:用训练集中每组的平均值替换测试集中的缺失值

问题描述 投票:0回答:1

我想根据“Class”列每个类别的平均值来替换测试集“X”列中的缺失值,但这些平均值必须来自训练集。

train:

| Class | X   |
| ---   | --- |
| A     | 10  |
| A     | NaN |
| A     | 20  |
| B     | 15  |
| B     | 17  |
| B     | NaN |
test:

| Class | X   |
| ---   | --- |
| A     | 11  |
| A     | NaN |
| B     | 25  |
| B     | NaN |

想法是用训练集中各组的平均值来替换测试集中相应的缺失值。在这种情况下,训练集中每个类别的 X 列的平均值为:

  • A 类的 X 平均值:15
  • B 类的 X 平均值:16

所以,最终的测试集应该这样转换:

final_test:

| Class | X   |
| ---   | --- |
| A     | 11  |
| A     | 15  |
| B     | 25  |
| B     | 16  |

我使用了 groupby() 函数,但后来我不知道如何采用训练集的分组值来替换测试集中的缺失值。

非常感谢。

python pandas group-by imputation fillna
1个回答
0
投票

尝试:

df_test = (
    df_test.set_index("Class").fillna(df_train.groupby("Class").mean()).reset_index()
)
print(df_test)

打印:

  Class     X
0     A  11.0
1     A  15.0
2     B  25.0
3     B  16.0
© www.soinside.com 2019 - 2023. All rights reserved.