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

时间:2018-06-22 16:02:26

标签: python pandas group-by pandas-groupby fillna

我尝试使用groupby(client_id或client _ name),用它来替换列特征计数中的NaN值(其整数范围为1到10), 但是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值?

1 个答案:

答案 0 :(得分:3)

df.groupby('client_name')['feature_count'].mean()返回一个序列。

但是您不希望将空值替换为一系列。相反,您想用从系列映射的均值替换空值。

因此,您可以使用以下内容:

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

更可恶的将是利用pd.DataFrame.transform,它为您处理映射部分:

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