Как заполнить поле на основе другого столбца в Python?

#python #pandas #dataframe

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

Вопрос:

Мне нужно заполнить поля столбца на основе других столбцов таким образом:

В первом df есть два столбца — имена и возраст детей, но некоторые строки являются NAN, однако с NAN ничего не нужно делать, просто игнорируйте их. Но возраст должен быть заполнен на основе второго df.

Первый df:

 data = {'Name Kids':  ['Valentina', 'Mark', 'Sofia', np.nan, 'Manny', 'Alex', 'Claire', np.nan, np.nan],
        'Age Kids': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]
        }

df = pd.DataFrame (data, columns = ['Name Kids','Age Kids'])

print (df)
 

это:

    Name Kids  Age Kids
0  Valentina       NaN
1       Mark       NaN
2      Sofia       NaN
3        NaN       NaN
4      Manny       NaN
5       Alex       NaN
6     Claire       NaN
7        NaN       NaN
8        NaN       NaN
 

Итак, основываясь на втором df, возраст детей должен быть вставлен в первый df. Однако в этом df больше дочерних элементов, чем в первом, но дочерние элементы, которые находятся в плюсе, не должны копироваться.

Второй df:

 data1 = {'Children Names':  ['Eloise', 'Valentina', 'Brian', 'Daphne', 'Mark', 'Sofia', 'Betty', 'Manny', 'Ronnie', 'Alex', 'Claire'],
        'Children Ages': [17, 13, 11, 7, 12, 3, 16, 10, 1, 5, 14]
        }

df1 = pd.DataFrame (data1, columns = ['Children Names', 'Children Ages'])

print (df1)
 

это:

           Children Names  Children Ages
0          Eloise             17
1       Valentina             13
2           Brian             11
3          Daphne              7
4            Mark             12
5           Sofia              3
6           Betty             16
7           Manny             10
8          Ronnie              1
9            Alex              5
10         Claire             14
 

Таким образом, окончательный df, если первый, но изменен таким образом, что дети, которые также были найдены во втором df, теперь имеют соответствующий возраст.

Final df — это первый, но измененный:

    Name Kids  Age Kids
0  Valentina      13.0
1       Mark      12.0
2      Sofia       3.0
3        NaN       NaN
4      Manny      10.0
5       Alex       5.0
6     Claire      14.0
7        NaN       NaN
8        NaN       NaN
 

Я пробовал что-то подобное, но я не мог понять, как проверить совпадающие имена и как скопировать возраст из второго df в первый df.

 df.loc[df['Name Kids'] != np.nan,  'Age Kids'] = 
 

Как добраться до конечного результата? Я очень новичок в этом, и мне действительно нужна помощь, если вы можете мне помочь, пожалуйста!

Ответ №1:

Вы можете использовать .map для сопоставления возрастов там, где совпадают имена.

 df['Age Kids'] = df['Name Kids'].map(dict(df1[['Children Names', 'Children Ages']].to_numpy())
 

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

1. @ElisaL. Нет проблем, .map очень удобен для подобных вещей. Рад помочь

Ответ №2:

Вы можете использовать update() .

1- Столбцы, которые необходимо заменить, должны иметь одинаковые имена.
2 — Его значения заменяются на основе индекса

 df = df.rename(columns={"Age Kids":"Children Ages"})
df = df.set_index('Name Kids')
df.update(df1.set_index('Children Names'))
df = df.reset_index()
df = df.rename(columns={"Children Ages":"Age Kids"})
display(df)
 

ВЫВОД

введите описание изображения здесь

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

1. Большое вам спасибо!!

2. @ElisaL. С удовольствием!