2017-11-10 15 views
0

私は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 

(私のパネルデータは私の問題を説明するためのものです)。私は

前同四半期と3年間の雇用の変動を計算したいので、第二およびTHIR四半期における第二id 2010年に計算はしてはならないことをこれらの

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 

チェックのようになります。結果2007年第2四半期と2007年第3四半期にIDが存在しなかったため、私が作ってください。コードは次のようになりSTATAで

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

+0

これらの結果をどのように取得するか説明できますか? –

+0

はい、id1の場合、ジョブの計算は((2010Q1/2007Q1)-1)、((2010Q2/2007Q2)-1)などです。今日から3年前(同じ四半期)のジョブのバリエーションを計算してください –

+0

私の答えを見て、私はそれがあなたが探しているものだと信じています。 –

答えて

2

IIUCは、あなたがapply続いidgroupbyquarterが必要です

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年前の対応価値で除したものです。

+0

@LucasDreslどうやら、あなたはそれを正しくコピーしましたか? jobs.apply(lambda x:x/x.shift(3) - 1) ' –

+0

それは単一行バージョンです:' df ['jobs_variation'] = df.groupby(['id'、 'quarter'])非常にありがとうございます:) –

+0

@COLDSPEED速くなる可能性のあるコードはありますか?2200万のレコードがあり、機能別にグループ化して適用するには長すぎます –