Как искать и выводить значение из другого фрейма данных на основе значений в двух столбцах - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть два кадра данных.Мне нужно вывести значение из правой (второй) базы данных и добавить его в виде столбца к левому (первому) кадру данных на основе двух других столбцов, которые существуют в обоих кадрах данных.При этом мне нужно присвоить этому столбцу другое имя в левом фрейме данных, чем то, что он называется в правом фрейме.

Я исключил 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

Итак, я пытаюсь выяснить, что является реальной проблемой и какисправить это. Любая помощь будет высоко ценится.

Спасибо.

...