如何用Pandas Groupby按组填充唯一值补全缺失值?
Pandas分组填充组内缺失值方案
原始数据
import pandas as pd import numpy as np df = pd.DataFrame({'value': [1, np.nan, np.nan, 2, 2, 2, 3, np.nan, 3], 'name': ['A','A', 'B','B','B','B', 'C','C','C']})
原始DataFrame输出:
name value 0 A 1.0 1 A NaN 2 B NaN 3 B 2.0 4 B 2.0 5 B 2.0 6 C 3.0 7 C NaN 8 C 3.0
需求说明
基于name列分组,用每组唯一的非NaN值填充组内所有缺失值(已知每组除NaN外仅存在一个唯一值)。
实现方法
方法1:groupby + transform 直接赋值
因为每组非NaN值唯一,使用first/max/min等聚合函数都能提取到该唯一值,再通过transform将值广播到组内所有行,自动覆盖NaN:
df['value'] = df.groupby('name')['value'].transform('first')
方法2:fillna 结合 groupby.transform
通过fillna指定填充值为分组后的唯一非NaN值:
df['value'] = df['value'].fillna(df.groupby('name')['value'].transform('max'))
处理后结果
name value 0 A 1.0 1 A 1.0 2 B 2.0 3 B 2.0 4 B 2.0 5 B 2.0 6 C 3.0 7 C 3.0 8 C 3.0
内容的提问来源于stack exchange,提问作者user308827
相关产品推荐
相关产品推荐

