Переход через иерархии данных в панде - PullRequest
0 голосов
/ 08 декабря 2018

Я работаю над фреймом данных панд, который состоит из иерархических отношений.Рассмотрим приведенный ниже кадр данных:

|---------------------|------------------|
|      Employee       |      Manager     |
|---------------------|------------------|
|          A          |         NaN      |
|---------------------|------------------|
|          B          |         A        |
|---------------------|------------------|
|          C          |         B        |
|---------------------|------------------|

применяются следующие допущения:

  1. Столбец сотрудника никогда не будет нулевым / Нан
  2. Сотрудник может /может не иметь менеджера
  3. Каждый менеджер также является сотрудником
  4. В иерархии может быть уровень '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        |
|---------------------|------------------|------------------|

Пожалуйста, помогите мне выяснить, где я иду не так.Заранее спасибо: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...