Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建另一个数据集的列之间差异的新数据集_Python_Loops_Difference_Listiterator - Fatal编程技术网

Python 创建另一个数据集的列之间差异的新数据集

Python 创建另一个数据集的列之间差异的新数据集,python,loops,difference,listiterator,Python,Loops,Difference,Listiterator,我一直在努力寻找群体之间的差异。因为它有点复杂,我请看下面我的工作和代码: 从以下数据集开始: df的输出 我预期的最终结果,但我没有产生 理想情况下,我需要找出每个可能的工作组合的维度之间的差异。我确实试过了,当我有两个职业的时候,当我加上第三个职业的时候,它成功了,然后失败了。我所有的代码都在下面 Occ_s Occ_t Skill_missing Chef Programmer Python Che

我一直在努力寻找群体之间的差异。因为它有点复杂,我请看下面我的工作和代码:

从以下数据集开始: 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后,设置一个新变量以识别技能 堆叠和取消堆叠以查找目标职业缺少哪些技能 我尝试了这个,但是我得到了重复的结果,结果爆炸了,看起来不像上面预期的结果 更新问题已经解决了。希望我在应用大数据时也能起到同样的作用。尽管如此,我还是希望看到一些更简单的方法,因为我认为我的方法是复杂而漫长的。我非常希望看到一些更简单的解决方案。请参阅下面我的代码的其余部分。
如果我理解正确,这将起作用: 此代码是您的:

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