如何用Python/Pandas按IMDB Score分组求均值填充Meta Score空值?
按IMDB Score分组填充Meta Score空值
核心思路
针对Meta Score的空值,按IMDB Score分组,用同组内非空Meta Score的均值填充,而非全局均值。
示例代码实现
1. 构造测试数据
先模拟你的电影数据集:
import pandas as pd import numpy as np data = { '电影': ['A', 'B', 'C', 'D', 'E'], 'IMDB Score': [7, 8, 8, 8, 8], 'Meta Score': [75, 82, 85, np.nan, 88] } df = pd.DataFrame(data)
2. 方法一:用groupby + transform快速填充
transform会为每行返回对应IMDB分组的Meta Score均值,直接配合fillna使用:
# 生成每行对应的IMDB分组Meta Score均值 group_mean = df.groupby('IMDB Score')['Meta Score'].transform('mean') # 填充空值 df['Meta Score'] = df['Meta Score'].fillna(group_mean)
3. 方法二:先预计算分组均值字典,再映射填充
如果需要更清晰的分组逻辑,先计算每个IMDB Score对应的均值字典,再通过映射填充:
# 计算每个IMDB分组的Meta Score均值,转为字典 mean_dict = df.groupby('IMDB Score')['Meta Score'].mean().to_dict() # 对空值行,用IMDB Score匹配字典中的均值填充 df['Meta Score'] = df['Meta Score'].fillna(df['IMDB Score'].map(mean_dict))
效果验证
运行代码后,电影D的Meta Score会被填充为IMDB=8分组的均值(82+85+88)/3=85,最终结果如下:
| 电影 | IMDB Score | Meta Score |
|---|---|---|
| A | 7 | 75.0 |
| B | 8 | 82.0 |
| C | 8 | 85.0 |
| D | 8 | 85.0 |
| E | 8 | 88.0 |
内容的提问来源于stack exchange,提问作者LostDev
相关产品推荐
相关产品推荐

