Python 创建另一个数据集的列之间差异的新数据集
我一直在努力寻找群体之间的差异。因为它有点复杂,我请看下面我的工作和代码: 从以下数据集开始: df的输出 我预期的最终结果,但我没有产生 理想情况下,我需要找出每个可能的工作组合的维度之间的差异。我确实试过了,当我有两个职业的时候,当我加上第三个职业的时候,它成功了,然后失败了。我所有的代码都在下面Python 创建另一个数据集的列之间差异的新数据集,python,loops,difference,listiterator,Python,Loops,Difference,Listiterator,我一直在努力寻找群体之间的差异。因为它有点复杂,我请看下面我的工作和代码: 从以下数据集开始: df的输出 我预期的最终结果,但我没有产生 理想情况下,我需要找出每个可能的工作组合的维度之间的差异。我确实试过了,当我有两个职业的时候,当我加上第三个职业的时候,它成功了,然后失败了。我所有的代码都在下面 Occ_s Occ_t Skill_missing Chef Programmer Python Che
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后,设置一个新变量以识别技能
堆叠和取消堆叠以查找目标职业缺少哪些技能
我尝试了这个,但是我得到了重复的结果,结果爆炸了,看起来不像上面预期的结果
更新问题已经解决了。希望我在应用大数据时也能起到同样的作用。尽管如此,我还是希望看到一些更简单的方法,因为我认为我的方法是复杂而漫长的。我非常希望看到一些更简单的解决方案。请参阅下面我的代码的其余部分。
如果我理解正确,这将起作用: 此代码是您的:
import pandas as pd
import copy
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)
df = df.set_index(['Occ','Skill'])['Num'].unstack(fill_value=0)
out = df.stack(0).reset_index()
只是添加列名
out.columns=['Occ','Skill','tmp']
创建输出的副本
out_2 = copy.deepcopy(out)
将一更改为零,将零更改为一,以将Occ与另一个职业合并。因此,我们将得到一个表格,其中每个职业将与另一个职业合并,其中一个职业缺少技能
out_2['tmp'] = 1- out_2['tmp']
只是添加列名
out_2.columns =['Occ_t','Skill_t','tmp']
按计划合并
k= out_2.merge(out,on='tmp',how='inner')
但是我们得到了重复的每一对[Occ,Skill]将在1和0之间,所以让我们选择其中一个(我选择了0)
最后一个阶段,我们想要得到不同的职业。通过(k.Skill\u t==k.Skill),我们可以用一个技能得到所有的Occ\u t和Occ
k[(k.Occ_t != k.Occ) & (k.Skill_t==k.Skill)][['Occ_t','Occ','Skill']]
结果:
Out[0]:
Occ_t Occ Skill
3 Chef Data Budget
6 Chef Programmer Budget
13 Chef Data Communication
23 Chef Data Cook
25 Chef Programmer Cook
27 Data Chef Python
37 Data Chef R
47 Data Chef SAS
53 Data Programmer SAS
58 Programmer Data Communication
63 Programmer Chef Python
73 Programmer Chef R
你能对这部分稍加评论吗:out_2=copy.deepcopy(out)out_2['tmp']=1-out_2['tmp']out_2.columns=['Occ_t','Skill_t','tmp']k=out_2.merge(out,on='tmp',how='inner')k=k[k.tmp==0]k[[k.Occ_t!=k.Occ]=k.Skill t==k.Skill k['Occ_t','t']。我补充说。我尽力了。如果你有任何问题,我会尽力回答。艾吉利桑,谢谢,我上面的代码也很有效,我喜欢你的方法。现在我面临的问题是我的数据集太大了,所有的组合都高达120亿。我试图一个职业一个职业循环,但仍在努力
out_2 = copy.deepcopy(out)
out_2['tmp'] = 1- out_2['tmp']
out_2.columns =['Occ_t','Skill_t','tmp']
k= out_2.merge(out,on='tmp',how='inner')
k = k[k.tmp==0]
k[(k.Occ_t != k.Occ) & (k.Skill_t==k.Skill)][['Occ_t','Occ','Skill']]
Out[0]:
Occ_t Occ Skill
3 Chef Data Budget
6 Chef Programmer Budget
13 Chef Data Communication
23 Chef Data Cook
25 Chef Programmer Cook
27 Data Chef Python
37 Data Chef R
47 Data Chef SAS
53 Data Programmer SAS
58 Programmer Data Communication
63 Programmer Chef Python
73 Programmer Chef R