如何用Pandas按国家分组的taster_name最高频次值填充缺失值?
按国家用频次最高的品酒师填充缺失值
我来帮你搞定这个问题!你想要根据缺失值所属国家,用该国出现频次最高的taster_name填充缺失值,用Pandas就能轻松实现,具体步骤如下:
1. 生成每个国家对应的高频品酒师映射表
首先我们需要先统计每个国家里出现次数最多的品酒师名字,这里可以通过分组后结合value_counts来获取:
# 计算每个国家频次最高的taster_name,同时处理全缺失的国家 country_top_taster = wine.groupby('country')['taster_name'].agg( lambda x: x.value_counts().index[0] if not x.value_counts().empty else 'Unknown' )
这里加了个判断if not x.value_counts().empty是为了处理某个国家所有taster_name都缺失的极端情况,避免报错,这种情况我们统一填充'Unknown',你也可以换成自己需要的默认值。
2. 用映射表填充缺失值
接下来就可以用上面生成的映射表,把每个国家对应的高频品酒师填充到该国家的缺失值里:
# 填充taster_name的缺失值 wine['taster_name'] = wine['taster_name'].fillna(wine['country'].map(country_top_taster))
map()方法会根据每行的country去匹配country_top_taster里对应的品酒师名字,再通过fillna()替换掉原来的缺失值。
验证效果
你可以用之前的代码再次查看统计结果,或者直接检查填充后的缺失情况:
# 查看各国家品酒师的频次统计 print(wine[['country','taster_name']].groupby('country').taster_name.value_counts()) # 检查是否还有剩余缺失值 print(wine['taster_name'].isna().sum())
内容的提问来源于stack exchange,提问作者Evan.Chen
相关产品推荐
相关产品推荐

