如何用每组中出现频率最高的值填充 DataFrame 中的缺失值?

How to fill missing values in a DataFrame with the most frequent value of each group?

我有一个包含两列的 pandas DataFrame:toycolorcolor 列包含缺失值。

如何使用特定 toy 最常见的 color 填充缺失的 color 值?

下面是创建示例数据集的代码:

import pandas as pd
import numpy as np
df = pd.DataFrame({
    'toy':['car'] * 4 + ['train'] * 5 + ['ball'] * 3 + ['truck'],
    'color':['red', 'blue', 'blue', np.nan, 'green', np.nan,
             'red', 'red', np.nan, 'blue', 'red', np.nan, 'green']
    })

这是示例数据集:

      toy  color
0     car    red
1     car   blue
2     car   blue
3     car    NaN
4   train  green
5   train    NaN
6   train    red
7   train    red
8   train    NaN
9    ball   blue
10   ball    red
11   ball    NaN
12  truck  green

这是想要的结果:

关于真实数据集的注释:

This question是有关系的,但是没有回答我如何用出现频率最高的值来填充缺失值的问题。

您可以使用groupby()+transform()+fillna():

df['color']=df['color'].fillna(df.groupby('toy')['color'].transform(lambda x:x.mode().iat[0]))

如果想在有 2 个或更多频繁值时 select 随机值:

from random import choice

df['color']=df['color'].fillna(df.groupby('toy')['color'].transform(lambda x:choice(x.mode())))

您想 fillnamode:

df["color"] = df.groupby("toy")["color"].apply(lambda x: x.fillna(x.mode().iat[0]))