переключение между списками (переходная матрица) - PullRequest
0 голосов
/ 08 октября 2018

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

Сводная таблица генерируется из необработанных данных (в нижней части этого вопроса) следующим образом:

newdf.pivot_table(columns=['employers'], index=['indviduals','year'], fill_value=0, aggfunc=len)



     employers     1    7   12  13  15  22  23  27  28  45  99
indviduals  year                                            
7          2000    1    0   0   0   0   0   0   0   0   0   0
           2001    0    0   0   0   1   0   0   0   0   0   0
           2002    0    0   0   0   0   0   1   0   0   0   0
           2004    0    0   0   0   0   1   0   0   0   0   0
           2005    0    0   0   0   0   0   0   0   0   1   0
           2006    0    0   0   0   0   0   0   0   1   0   0
           2009    0    0   0   0   0   0   0   0   0   1   0
12         1999    0    0   2   0   0   0   0   0   0   0   0
           2001    0    0   1   1   0   0   0   0   0   0   0
           2006    0    0   0   0   0   0   0   0   0   0   1
           2012    0    0   1   0   0   0   0   0   0   0   0

Вот что я пробовал в python:

transitions = newdf ['работодатели']

n=1+max(transitions)
M = [[0]*n for _ in range(n)]
for (i, j) in zip(transitions, newdf['indviduals'][1:]):
       M[i][j] +=1 #this generates list out of index error.

Это очевидная ошибка, потому что я пытаюсь сопоставить список неравной длины.

вторая попытка

counts=newdf.groupby('individual')['employer'].value_counts()

(counts/counts.sum()) 

. Это не даст мне состояния перехода от работодателя к работодателю.

RAW DATA

import pandas as pd

newd = {'year': [2001, 2002, 2005, 2002, 2004, 1999, 2000, 1999, 2012, 2000, 2010, 2005, 2006, 2009, 2009, 2009, 2009, 2010, 2001, 2001,
                 2004, 2001, 2002, 2006, 2009,2001,2002,2003,2004,2005],
     'indviduals': [12, 23, 24, 28,30, 12,7, 12, 12, 23, 24, 7, 12, 35, 39,37, 36, 333, 13, 15, 7, 7, 7, 7, 7, 12, 13, 15, 28,30],
     'employers': [12, 23, 28, 22, 12, 12,1, 12, 12, 23, 27, 45, 99, 7, 7, 7, 7, 1, 15, 13, 22, 15, 23, 28, 45, 13, 13, 13, 13, 13] }

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