Я работаю над фреймом данных панд, который состоит из иерархических отношений.Рассмотрим приведенный ниже кадр данных:
|---------------------|------------------|
| Employee | Manager |
|---------------------|------------------|
| A | NaN |
|---------------------|------------------|
| B | A |
|---------------------|------------------|
| C | B |
|---------------------|------------------|
применяются следующие допущения:
- Столбец сотрудника никогда не будет нулевым / Нан
- Сотрудник может /может не иметь менеджера
- Каждый менеджер также является сотрудником
- В иерархии может быть уровень 'n'.Таблица с примерами состоит из 2 уровней, то есть C -> B -> A. В этом случае A является RootManager
Expected Output
|---------------------|------------------|------------------|
| Employee | Manager | RootManager |
|---------------------|------------------|------------------|
| A | NaN | A |
|---------------------|------------------|------------------|
| B | A | A |
|---------------------|------------------|------------------|
| C | B | A |
|---------------------|------------------|------------------|
Я написал приведенный ниже код для достижения этого результата.
#Import required libraries
import pandas as pd
#Read source data from excel file
data = pd.read_excel('test_data.xlsx')
#Create a Dictionary for Lookup
dct = dict(zip(data.Employee.values, data.Manager.values))
#A recursive function that takes in employee as an argument and uses
#dct to iterate through the records and identify the RootManager
def get_parentid(Employee):
Manager = dct.get(Employee)
if pd.isnull(Manager):
return Employee
else:
get_parentid(Manager)
#Call the function for each record
data['RootManager']=data.Employee.map(get_parentid)
print(data)
Я проверил свою функцию, и она вернула правильные значения.Однако, когда я использую функцию карты, я не получаю желаемый результат.ниже приведен вывод кода.
Output:
|---------------------|------------------|------------------|
| Employee | Manager | RootManager |
|---------------------|------------------|------------------|
| A | NaN | A |
|---------------------|------------------|------------------|
| B | A | null |
|---------------------|------------------|------------------|
| C | B | null |
|---------------------|------------------|------------------|
Пожалуйста, помогите мне выяснить, где я иду не так.Заранее спасибо: -)