Python中如何用pandas按另一列对应高频值填充DataFrame空值
实现方案(基于Pandas)
import pandas as pd import numpy as np # 构造示例数据,实际使用时替换为你自己的数据集读取逻辑即可,比如pd.read_excel/ pd.read_csv data = { "ID": [0,1,2,3,4,5,6,7], "City": ["New York", np.nan, "London", "Mumbai", "Sydney", np.nan, "Sydney", "Brisbane"], "Country": ["USA", "USA", "UK", "IND", "AUS", "AUS", "AUS", "AUS"] } df = pd.DataFrame(data) # 核心填充逻辑 df["City"] = df.groupby("Country")["City"].transform( lambda x: x.fillna(x.mode()[0]) ) # 输出结果验证 print(df)
逻辑说明
- 首先按
Country字段对整个数据集做分组,保证同国家的数据在同一个分组内处理 - 对每个分组的
City列使用mode()方法计算众数,也就是该国家出现频次最高的城市名 - 用计算得到的众数填充当前分组内的所有
NaN空值
边界情况兼容
如果存在某国家所有City值均为空的场景,可以修改lambda表达式增加容错判断,避免索引报错:
lambda x: x.fillna(x.mode()[0] if not x.mode().empty else "未知城市")
内容的提问来源于stack exchange,提问作者chas
相关产品推荐
相关产品推荐

