У меня есть два кадра данных.Мне нужно вывести значение из правой (второй) базы данных и добавить его в виде столбца к левому (первому) кадру данных на основе двух других столбцов, которые существуют в обоих кадрах данных.При этом мне нужно присвоить этому столбцу другое имя в левом фрейме данных, чем то, что он называется в правом фрейме.
Я исключил merge
и join
, потому что в фреймах данных есть сотни столбцов иМне нужно только перенести один столбец, и мне также нужно изменить имя столбца при этом.Вместо этого я пытаюсь map
it.
Например:
import pandas as pd
emp_data = {
'Name':['Tom', 'Tom', 'Steve', 'Steve'],
'Age':[28,34,29,42],
'Job':['Engineer', 'Coordinator', 'Analyst', 'Manager']
}
emps = pd.DataFrame(emp_data)
print(emps)
pay_data = {
'Name':['Tom', 'Tom', 'Steve', 'Steve'],
'Age':[28,34,29,42],
'Salary':[80, 50, 70, 100]
}
pay = pd.DataFrame(pay_data)
print(pay)
keys = ['Name', 'Age']
emps['Pay'] = emps[keys].map(pay.set_index(keys)['Salary'])
В результате я ожидаю, что emps
dataframe будет иметь 4 столбца: Name, Age, Job иОбращайте.Столбец «Оплата» будет содержать данные из столбца «Зарплата» в кадре данных pay
и будет отображаться на основе имени и возраста.
Вместо этого код выдает ошибку:
AttributeError: у объекта «DataFrame» нет атрибута «map»
Однако, когда я изменяю код на map на основе одногозначение (сначала делает значения уникальными), код работает.
import pandas as pd
emp_data = {
'Name':['Tom', 'Bill', 'Steve', 'John'],
'Age':[28,34,29,42],
'Job':['Engineer', 'Coordinator', 'Analyst', 'Manager']
}
emps = pd.DataFrame(emp_data)
print(emps)
pay_data = {
'Name':['Tom', 'Bill', 'Steve', 'John'],
'Age':[28,34,29,42],
'Salary':[80, 50, 70, 100]
}
pay = pd.DataFrame(pay_data)
print(pay)
emps['Pay'] = emps['Name'].map(pay.set_index('Name')['Salary'])
print(emps)
Вывод:
Name Age Job Pay
0 Tom 28 Engineer 80
1 Bill 34 Coordinator 50
2 Steve 29 Analyst 70
3 John 42 Manager 100
Итак, я пытаюсь выяснить, что является реальной проблемой и какисправить это. Любая помощь будет высоко ценится.
Спасибо.