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)
我尝试使用它来替换列特征计数中的 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)