Пытаетесь написать функцию Python / pandas для обновления строк в определенном столбце, равном 0?

#python #pandas #dataframe

#python #панды #фрейм данных #pandas

Вопрос:

Я полностью застрял и не знаю, с чего начать. Я хочу написать функцию, которая заменяет значения нуля в столбце «возраст» значениями «возраст», где «год» одинаковый.

Вот пример фрейма данных с ожидаемым результатом:

 Sample df:
'age'   'name'  'year'
0       John    2018
0       John    2019
23      John    2018
24      John    2019


Expected output:
'age'   'name'  'year'
23      John    2018
24      John    2019
23      John    2018
24      John    2019
  

Ответ №1:

Использовать Series.map по строкам без 0 значений:

 d = df[df['age'].ne(0)].set_index('year')['age'].to_dict()

df['age'] = df['year'].map(d)
print (df)
   age  name  year
0   23  John  2018
1   24  John  2019
2   23  John  2018
3   24  John  2019
  

Если требуется сопоставление по 2 столбцам, используйте GroupBy.transform с заменой 0 на NaN :

 df['age'] = df.replace(0, np.nan).groupby(['year','name'])['age'].transform('first')
print (df)
    age  name  year
0  23.0  John  2018
1  24.0  John  2019
2  23.0  John  2018
3  24.0  John  2019
  

Ответ №2:

Вы можете использовать df.groupby с df.replace и GroupBy.bfill :

 In [1637]: import numpy as np

In [1638]: df.age = df.replace(0, np.nan).groupby('year').age.bfill()

In [1639]: df
Out[1639]: 
    age  name  year
0  23.0  John  2018
1  24.0  John  2019
2  23.0  John  2018
3  24.0  John  2019