多变量探索性分析:用聚类平均值填充缺失值的数据框

Multivariate Exploratory Analysis : Dataframe filling missing values with cluster mean values

我不想用 0 或变量平均值填充缺失值,而是想用数据集上其他类似观察的平均值来填充它们。

示例:A、B、C 和 D 是各种度量的单个样本。

    V1  V2  V3
A   8.7 4.3 5
B   nan 2.5 3
C   0.1 2.5 3
D   1.5 2.5 3

所以对变量 V2 和 V3 进行 K 均值聚类。 Returns 2 个簇:一个带有 A,第二个带有 B、C、D。 因为第二个集群与 B 相同,所以我想用 V1

的第二个集群平均值填充变量 V1 上的缺失值

所以对于 V1 中的 B 行,缺失值将是 0.8,因为 0.1 和 1.5 的平均值对应于 V1 上的 C 和 D 值。

这是一个非常简单的示例,所以我想知道如何使用 Python 对大型数据集执行此操作。

感谢您提供能够快速执行此操作并以这种方式“自动”填充缺失值的代码。

使用 sklearn 中的 KNNInputer:

import pandas as pd
import numpy as np
from sklearn.impute import KNNImputer

data = {'V1': [8.7, np.nan, 0.1, 1.5],
        'V2': [4.3, 2.5, 2.5, 2.5],
        'V3': [5, 3, 3, 3]}
df = pd.DataFrame(data)

imputer = KNNImputer(n_neighbors=2)
out = imputer.fit_transform(df)
out = pd.DataFrame(out, index=df.index, columns=df.columns)

输出:

>>> out
    V1   V2   V3
0  8.7  4.3  5.0
1  0.8  2.5  3.0
2  0.1  2.5  3.0
3  1.5  2.5  3.0