我有一个包含“id”、“x1”列的数据框。我想用'x1'中最常见的值替换'x1'中的缺失值以对应'id'。
例如,'x1'中存在缺失值,而'id'= 1。缺失值替换应该是'e',因为'e'是'id'= 1的频繁/模式(3次)值.
df = pd.DataFrame({'id': [1, 1, 2, 3, 1, 1, 1, 1, 4, 5],
'x1': ['a', np.nan, 'b', 'c', 'e', 'e', 'e', 'f', 'g', 'h']})
我的方法是先获取丢失记录的id。
df[df['x1'].isnull()==True]['id'].iloc[0]
然后使用
value_counts
从'x1'中获取最频繁的值,其中'id'.isin
在上面的输出中可用。
但是,这看起来在计算上很昂贵并且正在寻找有效的解决方案。
您可以创建一个字典,将列 id 中的每个值映射到它最常见的 x1 值。
dict_id_to_x1_mode = df.groupby('id')['x1'].agg(pd.Series.mode).to_dict()
然后使用字典将id映射到x1缺失的最频繁的x1值:
df.loc[df['x1'].isna(), 'x1'] = df.loc[df['x1'].isna(), 'id'].map(dict_id_to_x1_mode)