Как заполнить пропущенные значения в столбце на основе другого столбца

#python #pandas #dataframe

#python #pandas #dataframe

Вопрос:

У меня есть фрейм данных под названием shoes

 Brand   Comment
Ugg       NaN
Prada     NaN
Clarks    NaN
Ugg       NaN
Clark     NaN
Prada     Made from horse leather
Prada     Made from pig leather
Prada     NaN
Ugg       Made from Australian cow leather
...
  

и другой фрейм данных df_mode, который был получен путем использования режима комментариев для каждой марки обуви в фрейме данных shoes для ненулевых значений

 Brand  Comment
Ugg    Made from sheep 
Prada  Made from pig leather
Clarks Made from Cow leather

  

Как я могу присвоить недостающие значения для каждой марки обуви во фрейме данных shoes с соответствующим ответом режима, показанным во фрейме данных df_mode.

Это в основном то, чего я пытаюсь достичь

 Brand   Comment
Ugg       Made from sheep
Prada     Made from pig leather
Clarks    Made from Cow leather
Ugg       Made from sheep
Clark     Made from Cow leather
Prada     Made from horse leather
Prada     Made from pig leather
Prada     Made from pig leather
Ugg       Made from Australian cow leather
  

Ответ №1:

Используя loc и map :

 shoes.loc[shoes.Comment.isna(), 'Comment'] = shoes.Brand.map(df_mode.set_index('Brand')['Comment'])
  

Ответ №2:

Используя np.where

 shoes['Comment']=np.where(shoes['Comment'].isnull(),shoes['Brand'].map(dict(zip(df_mode['Brand']))),df_mode['Comment'],shoes['Comment'])
  

Ответ №3:

вы можете сначала groupby по столбцу Brand, затем заполнить недостающие значения. вот реализация:

 df['Comment'] = df.groupby(['Brand'], sort=False)['Comment'].apply(lambda x: x.ffill().bfill())