面板数据:np.where with groupby?

时间:2017-12-06 14:38:20

标签: python python-3.x pandas numpy

在以下数据框中,我想根据特定条件创建新的二进制变量0或1。条件是id,其中t-1大小小于或等于2,t大小必须大于2且t + 1大小应大于2.并且年t + 1应该连续到t

我的数据框看起来像这样

id    year    size   
1     2008       2       
1     2009       3       
1     2010       3       
2     2011       1       
2     2012       1       
2     2013       1       
3     2009       3       
3     2010       2       
3     2011       3       
3     2012       3 

我尝试使用np.where函数

df['new_variable'] = np.where((df.year.shift(-1) == df.year+ 1) & (df.year<2016) & (df.size.shift(1) < 3) & (df.size>2) & (df.size.shift(-1) > 2),1,0)

但首先我需要通过id执行此np.where,因为如果我执行我的np.where代码结果将是这样的,所以这就是为什么我首先需要'groupby'但不允许这样做。

id    year    size   new variable
1     2008       2       0
1     2009       3       1
1     2010       3       0
2     2011       1       0
2     2012       1       0
2     2013       1       0
3     2009       3       1    #this 1 it's incorrect, because a new id begin
3     2010       2       1
3     2011       3       0
3     2012       3       0

实际输出应如下所示

id    year    size   new variable
1     2008       2       0
1     2009       3       1
1     2010       3       0
2     2011       1       0
2     2012       1       0
2     2013       1       0
3     2009       3       0    
3     2010       2       1
3     2011       3       0
3     2012       3       0

0 个答案:

没有答案