面板数据熊猫,根据一定条件变化

时间:2017-11-10 21:10:00

标签: python pandas numpy stata

我是stata用户,我试图切换到python,我有一些代码的问题。如果我有以下面板数据

   id     year    quarter   fecha      jobs
     1    2007          1     220       10      
     1    2007          2     221       12    
     1    2007          3     222       12 
     1    2007          4     223       12      
     1    2008          1     224       12
     1    2008          2     225       13
     1    2008          3     226       14
     1    2008          4     227       9
     1    2009          1     228       12
     1    2009          2     229       15
     1    2009          3     230       18
     1    2009          4     231       15
     1    2010          1     232       15
     1    2010          2     233       16
     1    2010          3     234       17
     1    2010          4     235       18
     2    2007          1     220       10      
     2    2007          2     221       12    
     2    2007          3     222       12 
     2    2007          4     223       12      
     2    2008          1     224       12
     2    2008          2     225       13
     2    2008          3     226       14
     2    2008          4     227       9
     2    2009          1     228       12
     2    2009          2     229       15
     2    2009          3     230       18
     2    2009          4     231       15
     2    2010          1     232       15
     2    2010          2     233       16
     2    2010          4     235       18

(我的面板数据比示例大得多,只是为了说明我的问题)。我想计算同一季度和三年前的工作变化

所以结果应该看起来像这些

   id     year    quarter   fecha      jobs   jobs_variation
     1    2007          1     220       10        Nan
     1    2007          2     221       12        Nan
     1    2007          3     222       12        Nan
     1    2007          4     223       12        Nan
     1    2008          1     224       12        Nan
     1    2008          2     225       13        Nan
     1    2008          3     226       14        Nan
     1    2008          4     227       9         Nan
     1    2009          1     228       12        Nan
     1    2009          2     229       15        Nan
     1    2009          3     230       18        Nan
     1    2009          4     231       15        Nan
     1    2010          1     232       15        0.5
     1    2010          2     233       16        0.33
     1    2010          3     234       17        0.30769
     1    2010          4     235       18        0.5
     2    2007          1     220       10        Nan
     2    2007          4     223       12        Nan
     2    2008          1     224       12        Nan
     2    2008          2     225       13        Nan
     2    2008          3     226       14        Nan
     2    2008          4     227       9         Nan
     2    2009          1     228       12        Nan
     2    2009          2     229       15        Nan
     2    2009          3     230       18        Nan
     2    2009          4     231       15        Nan
     2    2010          1     232       15        0.5
     2    2010          2     233       16        Nan
     2    2010          3     234       20        Nan
     2    2010          4     235       18        0.5

检查在2010年的第二个id年中,第二季度和第四季度的计算结果一定不能由我在2007Q2和2007Q3上出现。

在stata中,代码将是,

bys id: gen jobs_variation=jobs/jobs[_n-12]-1 if fecha[_n-12]==fecha-12

1 个答案:

答案 0 :(得分:2)

IIUC,您需要groupby上的idquarter后跟apply

df['jobs_variation'] = df.groupby(['id', 'quarter']).jobs\
                               .apply(lambda x: x / x.shift(3) - 1)

df

    id  year  quarter  fecha  jobs  jobs_variation
0    1  2007        1    220    10             NaN
1    1  2007        2    221    12             NaN
2    1  2007        3    222    12             NaN
3    1  2007        4    223    12             NaN
4    1  2008        1    224    12             NaN
5    1  2008        2    225    13             NaN
6    1  2008        3    226    14             NaN
7    1  2008        4    227     9             NaN
8    1  2009        1    228    12             NaN
9    1  2009        2    229    15             NaN
10   1  2009        3    230    18             NaN
11   1  2009        4    231    15             NaN
12   1  2010        1    232    15        0.500000
13   1  2010        2    233    16        0.333333
14   1  2010        3    234    17        0.416667
15   1  2010        4    235    18        0.500000
16   2  2007        1    220    10             NaN
17   2  2007        4    223    12             NaN
18   2  2008        1    224    12             NaN
19   2  2008        2    225    13             NaN
20   2  2008        3    226    14             NaN
21   2  2008        4    227     9             NaN
22   2  2009        1    228    12             NaN
23   2  2009        2    229    15             NaN
24   2  2009        3    230    18             NaN
25   2  2009        4    231    15             NaN
26   2  2010        1    232    15        0.500000
27   2  2010        2    233    16             NaN
28   2  2010        3    234    20             NaN
29   2  2010        4    235    18        0.500000

x / x.shift(3)将当前年份的工作计数(该季度)除以3年前的相应值。