我想根据“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 列的平均值为:
所以,最终的测试集应该这样转换:
final_test:
| Class | X |
| --- | --- |
| A | 11 |
| A | 15 |
| B | 25 |
| B | 16 |
我使用了 groupby() 函数,但后来我不知道如何采用训练集的分组值来替换测试集中的缺失值。
非常感谢。
尝试:
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