pandas 如何使用 groupby 将 NaN 值替换为平均值

How does pandas replace NaN values with mean value using groupby

我尝试使用它来替换列特征计数中的 NaN 值(它是一个范围从 1 到 10 的整数),使用 groupby(client_id 或 client_name), 然而 NaN 值似乎并没有消失。

df['feature_count'].isnull().sum()

输出为:

2254

现在我使用:

df['feature_count'].fillna(df.groupby('client_name')['feature_count'].mean(), inplace=True)

但输出保持不变:

df['feature_count'].isnull().sum()

2254

是否有任何其他方法可以通过按 ID 分组的列的其他非 NaN 值替换 NaN 值?

df.groupby('client_name')['feature_count'].mean()returns一个系列。

但您并不打算用系列替换空值。相反,您想用 从系列 映射的均值替换空值。

因此,您可以使用以下方法:

s = df.groupby('client_name')['feature_count'].mean()
df['feature_count'].fillna(df['client_name'].map(s), inplace=True)

更 Pandorable 将利用 pd.DataFrame.transform,它为您处理映射部分:

s = df.groupby('client_name')['feature_count'].transform('mean')
df['feature_count'].fillna(s, inplace=True)