如何用对应Item众数及其他列众数填充DataFrame缺失值?
解决分类缺失值填充问题
实现思路
先按Item分组计算每个组内City的众数,用该众数填充对应组内的缺失值;对于像Item=F这类组内无有效值的情况,再用整个City列的全局众数填充剩余缺失值。
具体代码实现
首先构造示例DataFrame:
import pandas as pd import numpy as np df = pd.DataFrame({ 'Item': ['A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'C', 'C', 'E', 'E', 'E', 'F', 'F'], 'City': ['Paris', np.nan, 'Rome', 'London', 'Paris', 'Berlin', np.nan, 'London', 'Rome', 'London', np.nan, 'London', 'Paris', np.nan, np.nan] })
然后执行填充操作:
- 计算每个Item分组的City众数,处理可能的多众数情况(取第一个):
item_mode = df.groupby('Item')['City'].agg(lambda x: x.mode().iloc[0] if not x.mode().empty else np.nan)
- 计算整个City列的全局众数:
global_mode = df['City'].mode().iloc[0]
- 先按分组众数填充缺失值,再用全局众数填充剩余缺失值:
# 第一步:用分组众数填充对应组的缺失值 df['City'] = df.apply(lambda row: item_mode[row['Item']] if pd.isna(row['City']) else row['City'], axis=1) # 第二步:用全局众数填充分组无有效值的剩余缺失值 df['City'] = df['City'].fillna(global_mode)
结果验证
处理后的DataFrame如下:
| Item | City | |
|---|---|---|
| 0 | A | Paris |
| 1 | B | Berlin |
| 2 | C | Rome |
| 3 | D | London |
| 4 | A | Paris |
| 5 | B | Berlin |
| 6 | C | Rome |
| 7 | D | London |
| 8 | C | Rome |
| 9 | C | London |
| 10 | E | London |
| 11 | E | London |
| 12 | E | Paris |
| 13 | F | London |
| 14 | F | London |
其中Item=F的缺失值被全局众数London填充,其他组的缺失值也按对应组的众数完成了填充。
内容的提问来源于stack exchange,提问作者mlangenfeld
相关产品推荐
相关产品推荐

