Используйте отображение между двумя столбцами, чтобы создать цепочку в панде - PullRequest
0 голосов
/ 18 сентября 2018

Вот тестовый фрейм данных.Я хочу использовать отношения между EmpID и MgrID для дальнейшего сопоставления менеджера MgrID в новом столбце.

Test_df = pd.DataFrame({'EmpID':['1','2','3','4','5','6','7','8','9','10'], 
                    'MgrID':['4','4','4','6','8','8','10','10','10','12']})
Test_df

Если я создам словарь для начальных отношений, я смогу создать первую ссылкуцепи, но я боюсь, что мне нужно перебрать все новые столбцы, чтобы создать новый.

ID_Dict = {'1':'4',
           '2':'4',
           '3':'4',
           '4':'6',
           '5':'8',
           '6':'8',
           '7':'10',
           '8':'10',
           '9':'10',
          '10':'12'}
Test_df['MgrID_L2'] = Test_df['MgrID'].map(ID_Dict)
Test_df

Какой самый эффективный способ сделать это?Спасибо!

1 Ответ

0 голосов
/ 18 сентября 2018

Вот способ с простым циклом while.Обратите внимание, что я изменил имя MgrID на MgrID_1

Test_df = pd.DataFrame({'EmpID':['1','2','3','4','5','6','7','8','9','10'], 
                        'MgrID_1':['4','4','4','6','8','8','10','10','10','12']})

d = Test_df.set_index('EmpID').MgrID_1.to_dict()

s = 2
while s:
    Test_df['MgrID_'+str(s)] =  Test_df['MgrID_'+str(s-1)].map(d)
    if Test_df['MgrID_'+str(s)].isnull().all():
        Test_df = Test_df.drop(columns='MgrID_'+str(s))
        s = 0
    else:
        s+=1

Выход: Test_df

  EmpID MgrID_1 MgrID_2 MgrID_3 MgrID_4 MgrID_5
0     1       4       6       8      10      12
1     2       4       6       8      10      12
2     3       4       6       8      10      12
3     4       6       8      10      12     NaN
4     5       8      10      12     NaN     NaN
5     6       8      10      12     NaN     NaN
6     7      10      12     NaN     NaN     NaN
7     8      10      12     NaN     NaN     NaN
8     9      10      12     NaN     NaN     NaN
9    10      12     NaN     NaN     NaN     NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...