Есть ли способ заменить нулевые значения значениями из другого столбца в dataframe?

#python #pandas #dataframe

#python #pandas #dataframe

Вопрос:

Я работаю с dataframe со многими отсутствующими значениями. Я ищу эффективный способ заменить отсутствующие значения. Ниже приведен пример фрейма данных:

 s/n     Name      Home_Zip      work_zip        Family_zip
 1      John      56729         N/A             836AB
 2      sawn      N/A           N/A             73836
 3      Michael   N/A          839CD            83093
 4      Nathan    93932        78393            N/a
 5      Jack      N/A          N/A              N/A
  

Здесь я хочу заполнить недостающие значения Home_Zip таким образом, чтобы они выглядели сначала в work_zip , если это
not null возвращает это значение, иначе оно возвращает family_zip . Если в случае всех значений
возвращает значение null неизвестно.

  s/n     Name      Home_Zip     work_zip        Family_zip
 1      John      56729         N/A              836AB
 2      sawn      73836         N/A              73836
 3      Michael   839CD         839CD            83093
 4      Nathan    93932         78393            N/a
 5      Jack      Unkown        N/A             N/A
  

Ответ №1:

Вы можете использовать bfill с последующим fillna() .

 df['Home_Zip'] = df.iloc[:, 2:].bfill(1).fillna('Unknown')['Home_Zip']
  

Или связать несколько fillna :

 df['Home_Zip'] = (df['Home_Zip'].fillna(df['work_zip'])
                     .fillna(df['Family_zip'])
                     .fillna('Unknown')
                 )
  

Вывод:

    s/n     Name Home_Zip work_zip Family_zip
0    1     John    56729      NaN      836AB
1    2     sawn    73836      NaN      73836
2    3  Michael    839CD    839CD      83093
3    4   Nathan    93932    78393        N/a
4    5     Jack  Unknown      NaN        NaN
  

Комментарии:

1. Идеально, это именно то, что я искал. Спасибо.

2. есть ли способ контролировать количество столбцов для поиска в bffill.

3. Да, вы можете заменить df.iloc[:,2:] на df[your_column_list] .