我一直在试着找出不同群体之间的差异。因为它有点复杂,请看我的工作和代码如下:
import pandas as pd
df = {'Occ': ['Chef','Chef','Chef',
'Programmer','Programmer','Programmer','Data','Data','Data'],
'Skill': ['Cook', 'Budget','Communication','Python', 'R','Communication','R','Python','SAS']}
df = pd.DataFrame(data=df)
理想情况下,我需要找出各种可能的工作组合的维度之间的差异。我确实试过了,当我有两个职业时,它起作用了,当我添加第三个职业时,它失败了。我所有的代码都在下面
Occ_s Occ_t Skill_missing
Chef Programmer Python
Chef Programmer R
Chef Data SAS
Chef Data R
Chef Data Python
Programmer Chef Cook
Programmer Chef Budget
Programmer Data SAS
Data Chef Cook
Data Chef Budget
Data Chef Chef
Data Programmer SAS
df['Num'] = 1
df1 = df.set_index(['Occ','Skill'])['Num'].unstack(fill_value=0)
out = df1.stack(0).reset_index()
iter_df = [[i,j] for i in out['Occ'].unique() for j in out['Occ'].unique() if i!=j]
iter_df = pd.DataFrame(iter_df, columns=['Occ_s', 'Occ_t'])
final = pd.merge(out,iter_df, left_on='Occ', right_on='Occ_s', how='left')
del final['Occ']
test_join = pd.merge(final, df, left_on=['Occ_t','Skill'], right_on=
['Occ','Skill'], how='outer')
test_join = test_join.dropna(subset=['Occ'])
test_join = test_join[test_join['Skill_indicator'] !=1]
del test_join['Occ']
test_join = test_join.rename(columns={0:'Skill_indicator'})
test_join = test_join[['Occ_s','Occ_t','Skill','Skill_indicator']]
如果我没听错的话,这会有用的: 此代码属于您:
只是添加列名 输出列=['Occ','Skill','tmp']
创建out的副本。在
^{pr2}$将一改为零,零改为一,将Occ与另一职业合并。因此,我们将得到一个表格,其中每个职业将与另一个职业合并,其中一个职业缺少技能。在
只是添加列名。在
^{4}$按计划合并
但是我们有重复的每对[Occ,Skill]都在1和0上,所以让我们选择其中一个(我选择了0)。在
最后一个阶段,我们想得到不同的职业。使用(k.Skill_t==k.Skill)我们可以得到所有的Occ_t和Occ。在
结果:
相关问题 更多 >
编程相关推荐