如何基于Pandas DataFrame其他列的值填充NaN空值?
用Pandas根据社区填充区域缺失值
核心思路
先从已有完整数据的行中,建立「社区(neighbourhood)→ 区域(neighbourhood group)」的对应映射,再用这个映射批量填充缺失的区域值。
实现步骤
1. 构建社区-区域映射字典
假设每个社区仅对应唯一区域(多数场景的通用情况),直接从无缺失值的行中提取唯一映射:
# 过滤无缺失值的行,去重后构建映射字典 neighborhood_group_map = df.dropna(subset=['neighbourhood group']).drop_duplicates('neighbourhood').set_index('neighbourhood')['neighbourhood group'].to_dict()
如果存在一个社区对应多个区域的冲突场景,优先取出现次数最多的区域:
from collections import Counter # 统计每个社区对应的区域及出现次数 group_counts = df.dropna(subset=['neighbourhood group']).groupby('neighbourhood')['neighbourhood group'].agg(Counter) # 提取每个社区出现频次最高的区域 neighborhood_group_map = {k: v.most_common(1)[0][0] for k, v in group_counts.items()}
2. 批量填充缺失值
用fillna结合map方法,快速替换所有neighbourhood group列的NaN值:
df['neighbourhood group'] = df['neighbourhood group'].fillna(df['neighbourhood'].map(neighborhood_group_map))
3. 验证填充结果
检查是否还有未填充的缺失值:
# 输出剩余缺失值数量 print(df['neighbourhood group'].isna().sum())
内容的提问来源于stack exchange,提问作者DaveHigs
相关产品推荐
相关产品推荐

