在列表之间切换(转换矩阵)

时间:2018-10-08 12:09:51

标签: python transition hidden-markov-models

我在计算人们换工作的过渡概率时遇到问题。在下面的示例中(这是数据透视表)。 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)

0 个答案:

没有答案