使用pandas进行数据分析

3
以下是我的整个数据集的摘要,只是为了说明我的问题。 该数据框显示了每个id的工作申请情况,我想知道哪种部门组合更有可能被个人申请?
df
id    education   area_job_application
 1      Collage           Construction 
 1      Collage                  Sales
 1      Collage         Administration
 2   University                Finance
 2   University                  Sales
 3      Collage                Finance
 3      Collage                  Sales
 4   University         Administration   
 4   University                  Sales
 4   University           Data analyst
 5   University         Administration
 5   University                  Sales

答案

              Construction    Sales    Administration   Finance   Data analyst
Contruction              1        1                 1         0             0
Sales                    1        5                 3         1             1           
Administration           1        3                 3         0             1
Finance                  0        2                 0         2             0
Data analyst             0        1                 1         0             1

这个答案表明,管理和销售是更有可能收到相同id的申请的部门(这就是我在寻找的答案)。但我也对其他组合感兴趣,我认为热力图将非常有信息量地说明这些数据。
来自同一部门的部门组合是无关紧要的(也许在答案矩阵的对角线上应该是0,不管值是多少,我不会进行分析)。
1个回答

1

使用 crosstabgroupbysizeunstack 首先处理数据,然后通过转置 DataFrame 使用 DataFrame.dot,最后添加 reindex 来自定义索引和列的顺序:

#dynamic create order by unique values of column
L = df['area_job_application'].unique()

#df = pd.crosstab(df.id, df.area_job_application)
df = df.groupby(['id', 'area_job_application']).size().unstack(fill_value=0)
df = df.T.dot(df).rename_axis(None).rename_axis(None, axis=1).reindex(columns=L, index=L)
print (df)
                Construction  Sales  Administration  Finance  Data analyst
Construction               1      1               1        0             0
Sales                      1      5               3        2             1
Administration             1      3               3        0             1
Finance                    0      2               0        2             0
Data analyst               0      1               1        0             1

@LucasDresl - 当然,给我一秒钟。 - jezrael
我的错,我做错了什么,现在我再试一次。 - Lucas Dresl
顺便问一下,你知道怎么将矩阵的对角线置为零吗? - Lucas Dresl
使用 np.fill_diagonal(df.values, 0) - jezrael
顺便提一下,在我之前的回答中,我添加了一些时间,如果您感兴趣,可以查看一下。 - jezrael
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接