如何用对应国家的IncidenceOfMalaria最小值填充该国家的空值?
解决方案
先修正你代码里的变量名拼写错误(malarial_data应该和前面定义的malaria_data保持一致),接下来可以通过以下步骤完成需求,同时给出更高效的实现方案:
1. 直接用分组transform完成填充
不需要单独生成分组最小值的Series再映射,transform方法可以直接对每个国家的分组数据应用填充逻辑,返回和原数据长度匹配的结果,一步到位:
import pandas as pd malaria_data = pd.read_csv('DatasetAfricaMalaria.csv') # 按国家分组,用当前组的最小值填充组内NaN malaria_data['IncidenceOfMalaria'] = malaria_data.groupby('CountryName')['IncidenceOfMalaria'].transform( lambda group: group.fillna(group.min()) )
2. 处理极端情况(可选)
如果存在某个国家的IncidenceOfMalaria列全为NaN的情况,group.min()也会返回NaN,此时可以额外用整列的最小值填充剩余空值:
# 先按国家最小值填充,再处理全NaN的国家 overall_min = malaria_data['IncidenceOfMalaria'].min() malaria_data['IncidenceOfMalaria'] = malaria_data.groupby('CountryName')['IncidenceOfMalaria'].transform( lambda group: group.fillna(group.min()) ).fillna(overall_min)
3. 验证填充结果
可以用以下代码确认填充效果:
# 检查剩余空值数量 print(malaria_data['IncidenceOfMalaria'].isna().sum()) # 按国家查看填充后的统计数据 print(malaria_data.groupby('CountryName')['IncidenceOfMalaria'].describe())
内容的提问来源于stack exchange,提问作者Philosophia
相关产品推荐
相关产品推荐

