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

2024-10-17 06:21:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题来计算人们换工作的转移概率。在下面的示例中(这是一个透视表)。不同的雇主在不同的年份有不同的工作。我需要计算这个人换工作的可能性。你知道吗

数据透视表是根据原始数据(问题的底部)生成的,如下所示:

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中尝试的内容:

转换=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)

Tags: in示例for原始数据indexvalue概率year