条件缺失值插补与另一列的频率/模式

问题描述 投票:0回答:1

我有一个包含“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
在上面的输出中可用。

但是,这看起来在计算上很昂贵并且正在寻找有效的解决方案。

python pandas numpy missing-data
1个回答
0
投票

您可以创建一个字典,将列 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)
© www.soinside.com 2019 - 2024. All rights reserved.