嗨,我是stata用户,现在我正试图将我在stata的代码传递给python/大熊猫。在这种情况下,我想要创建一个新的变量size,如果作业数量在1到9之间,值1赋值1,如果作业在10到49之间,值2在50到199之间,值4分配给大于200个作业。
然后,如果可能的话(1:“微”,2:“小”,3:“中位数”,4:“大”)
id year entry cohort jobs
1 2009 0 NaN 3
1 2012 1 2012 3
1 2013 0 2012 4
1 2014 0 2012 11
2 2010 1 2010 11
2 2011 0 2010 12
2 2012 0 2010 13
3 2007 0 NaN 38
3 2008 0 NaN 58
3 2012 1 2012 58
3 2013 0 2012 70
4 2007 0 NaN 231
4 2008 0 NaN 241我试过使用这段代码,但没有成功。
df['size'] = np.where((1 <= df['jobs'] <= 9),'Micro',np.where((10 <= df['jobs'] <= 49),'Small'),np.where((50 <= df['jobs'] <= 200),'Median'),np.where((200 <= df['empleo']),'Big','NaN'))
发布于 2017-11-24 17:54:23
您想要做的是所谓的绑定使用pd.cut,即
df['new'] = pd.cut(df['jobs'],bins=[1,10,50,201,np.inf],labels=['micro','small','medium','big'])输出:
id year entry cohort jobs new
0 1 2009 0 NaN 3 micro
1 1 2012 1 2012.0 3 micro
2 1 2013 0 2012.0 4 micro
3 1 2014 0 2012.0 11 small
4 2 2010 1 2010.0 11 small
5 2 2011 0 2010.0 12 small
6 2 2012 0 2010.0 13 small
7 3 2007 0 NaN 38 small
8 3 2008 0 NaN 58 medium
9 3 2012 1 2012.0 58 medium
10 3 2013 0 2012.0 70 medium
11 4 2007 0 NaN 231 big
12 4 2008 0 NaN 241 big对于多个条件,您必须选择np.select而不是np.where。希望这能有所帮助。
numpy.select(condlist,choicelist,default=0) 其中,condlist是您的condtions的列表,而choicelist是满足条件的选择列表。默认值= 0,这里您可以将其放在np.nan中
使用np.select在.between的帮助下进行同样的操作,例如
np.select([df['jobs'].between(1,10),
df['jobs'].between(10,50),
df['jobs'].between(50,200),
df['jobs'].between(200,np.inf)],
['Micro','Small','Median','Big']
,'NaN')https://stackoverflow.com/questions/47477744
复制相似问题