我在计算人们换工作的过渡概率时遇到问题。在下面的示例中(这是数据透视表)。 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 ['employers']
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())
这不会给我从雇主到雇主的转变状态。
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)