面板数据:在多个复杂条件下创建新变量

时间:2017-11-24 21:07:08

标签: python pandas dataframe

我是一个stata用户,我试图将我的代码传递给python。我正在处理以下问题,我想创建一个名为null的新变量,它显示jobs_t5在接下来的5年中有以下条件id时的作业。 df.year==df.cohort

来自此数据框的示例传递:

df.cohort <= 2013

成:

id  year  entry  cohort  jobs  year_of_life  
1  2009    0     NaN      10      NaN         
1  2012    1     2012     12      0            
1  2013    0     2012     12      1
1  2014    0     2012     13      2
1  2015    0     2012     15      3
1  2016    0     2012     17      4
1  2017    0     2012     18      5
2  2009    1     2009     15      0 
2  2010    0     2009     2       1
2  2011    0     2009     3       2
2  2012    0     2009     3       3
2  2013    0     2009     15      4 
2  2014    0     2009     12      5
2  2015    0     2009     13      6
2  2016    0     2009     13      7

1 个答案:

答案 0 :(得分:2)

假设您打算将yearcohort进行比较,您可以将jobs向上移动5个点,然后进行索引和分配。

df['jobs_t5'] = df.jobs.shift(-5)[df.year == df.cohort]    
df

    id  year  entry  cohort  jobs  year_of_life  jobs_t5
0    1  2009      0     NaN    10           NaN      NaN
1    1  2012      1  2012.0    12           0.0     18.0
2    1  2013      0  2012.0    12           1.0      NaN
3    1  2014      0  2012.0    13           2.0      NaN
4    1  2015      0  2012.0    15           3.0      NaN
5    1  2016      0  2012.0    17           4.0      NaN
6    1  2017      0  2012.0    18           5.0      NaN
7    2  2009      1  2009.0    15           0.0     12.0
8    2  2010      0  2009.0     2           1.0      NaN
9    2  2011      0  2009.0     3           2.0      NaN
10   2  2012      0  2009.0     3           3.0      NaN
11   2  2013      0  2009.0    15           4.0      NaN
12   2  2014      0  2009.0    12           5.0      NaN
13   2  2015      0  2009.0    13           6.0      NaN
14   2  2016      0  2009.0    13           7.0      NaN