numpy 使用另一列的频率/众数进行条件缺失值插补

b09cbbtk  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(91)

我有一个 Dataframe ,其中包含'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在上面的输出中可用。
但是,这看起来在计算上是昂贵的,并且正在寻找有效的解决方案。

4urapxun

4urapxun1#

您可以创建一个字典,将列id中的每个值Map到它最常见的x1值。

dict_id_to_x1_mode = df.groupby('id')['x1'].agg(pd.Series.mode).to_dict()

然后使用字典将idMap到缺少x1的最频繁的x1值:

df.loc[df['x1'].isna(), 'x1'] = df.loc[df['x1'].isna(), 'id'].map(dict_id_to_x1_mode)

相关问题