python - 如何根据另一列中的值将 NaN 值替换为另一列的平均值? Pandas

标签 python pandas dataframe data-science

我有一个游戏发行和评级的数据框

name,platform,year_of_release,genre,na_sales,eu_sales,jp_sales,other_sales,critic_score,user_score,rating
Wii Sports,Wii,2006.0,Sports,41.36,28.96,3.77,8.45,76.0,8.0,E
Super Mario Bros.,NES,1985.0,Platform,29.08,3.58,6.81,0.77,,,
Mario Kart Wii,Wii,2008.0,Racing,15.68,12.76,3.79,3.29,82.0,8.3,E
Wii Sports Resort,Wii,2009.0,Sports,15.61,10.93,3.28,2.95,80.0,8.0,E
Pokemon Red/Pokemon Blue,GB,1996.0,Role-Playing,11.27,8.89,10.22,1.0,,,

我想用相同流派的平均值填充 user_score 列中的 NaN 值。如果游戏有体育类型,并且该行中的 user_score 为 NaN,我想用体育的平均用户评分替换空值。

最佳答案

该数据已删除第二场体育比赛的 user_score,以便我们演示代码。

name,platform,year_of_release,genre,na_sales,eu_sales,jp_sales,other_sales,critic_score,user_score,rating
Wii Sports,Wii,2006.0,Sports,41.36,28.96,3.77,8.45,76.0,8.0,E
Super Mario Bros.,NES,1985.0,Platform,29.08,3.58,6.81,0.77,,,
Mario Kart Wii,Wii,2008.0,Racing,15.68,12.76,3.79,3.29,82.0,8.3,E
Wii Sports Resort,Wii,2009.0,Sports,15.61,10.93,3.28,2.95,80.0,,E
Pokemon Red/Pokemon Blue,GB,1996.0,Role-Playing,11.27,8.89,10.22,1.0,,,

查看 Wii Sports Resort 的用户评分

df.iloc[3]['user_score']

nan

将 NaN 替换为按流派划分的 user_score 平均值

df['user_score'] = df.groupby('genre')['user_score'].transform(lambda x: x.fillna(x.mean()))

检查更新后同一游戏的输出

df.iloc[3]['user_score']

8.0

关于python - 如何根据另一列中的值将 NaN 值替换为另一列的平均值? Pandas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62775549/

相关文章:

python - 如何使用内联变量创建多行 Python 字符串?

python - 使用 pandas 的 TimeGrouper() 以 1 秒为间隔查找列数

python - 在保持串行读取的同时压缩一系列 JSON 对象?

Python 在列表中替换

python - 获取时间戳在不规则时间间隔内的行 pandas (Time Series)

python - Groupby Pandas DataFrame 并计算一列的平均值和标准偏差,并将标准添加为带有 reset_index 的新列

scala - 如何定义DataFrame的分区?

python - 如何使用 idxmax 输出对 pandas 数据框列进行子集化?

python - 在 Python CLI 中输入 Unicode 代码点

python - pandas 将字符串列转换为 boolean 值