#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. С удовольствием!