如何对大型DataFrame中相同id/用户的缺失值用同组有效数据填充
实现方案
你可以通过按用户维度分组填充的方式实现需求,无需使用merge操作,不会新增列,对多列、大数据量的场景适配性很高:
import pandas as pd import numpy as np # 构造原始DataFrame data = [{'a':2,'b': 2, 'c':3},{'b': 2, 'c':np.nan}, {'a': 10, 'b': 20, 'c': 30}, {'a': 10, 'b': np.nan, 'c': np.nan}] df = pd.DataFrame(data, index =['John', 'John', 'Mike' ,'Mike']) # 核心逻辑:按用户(索引)分组,每组内取对应列的第一个有效值填充所有空值 df = df.groupby(df.index).transform('first')
补充说明
- 上述写法性能最优,适合确认同一个用户的每列都至少存在一个有效值、且同用户同列的有效值唯一的场景,处理数十万行规模的数据集都无性能压力
- 如果同用户的有效值可能出现在任意行,没有固定顺序,可以用更通用的填充写法:
df = df.groupby(df.index).apply(lambda x: x.ffill().bfill()).reset_index(level=0, drop=True) - 如果你的用户标识是单独存储在列中而非索引,只需将
groupby(df.index)修改为groupby('用户列的列名')即可
内容的提问来源于stack exchange,提问作者alb
相关产品推荐
相关产品推荐

