У меня есть проблема для расчета вероятностей перехода людей, меняющих работу.В приведенном ниже примере (это сводная таблица).Индивидуальный 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)