Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 面板数据,根据特定条件的变化_Python_Pandas_Numpy_Stata - Fatal编程技术网

Python 面板数据,根据特定条件的变化

Python 面板数据,根据特定条件的变化,python,pandas,numpy,stata,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

我是一个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是否不能计算,因为2007年第二季度和2007年第三季度的id不存在

在stata,代码是


bys id:gen jobs\u variation=jobs/jobs[\u n-12]-1如果fecha[\u n-12]==fecha-12
IIUC,您需要在
id
quarter
上添加
groupby

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年前的相应值

IIUC,您需要在
id
quarter
上设置
groupby
,然后是
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年前的相应值

你能解释一下你是如何得到这些结果的吗?是的,对于id 1,工作的计算是((2010Q1/2007Q1)-1),((2010Q2/2007Q2)-1)等等。计算从今天到三年前(同一季度)的工作变化见我的答案,我相信这就是你想要的。你能解释一下你是如何得到这些结果的吗?是的,对于id 1,工作的计算是((2010Q1/2007Q1)-1),((2010Q2/2007Q2)-1)等等。计算一下从今天到三年前(同一季度)的工作变化见我的答案,我相信这就是你要找的。@LucasDresl不可能,你复制的正确吗?这是单行版本:
df['jobs\u variation']=df.groupby(['id','quarter']).jobs.apply(lambda x:x/x.shift(3)-1)
@COLDSPEED有没有更快的代码?我有2200万条记录,使用按函数分组和apply也需要long@LucasDresl不是香草熊猫,但是你应该考虑看<代码> DASK < /代码>数据文件。这是单行版本:
df['jobs\u variation']=df.groupby(['id','quarter']).jobs.apply(lambda x:x/x.shift(3)-1)
@COLDSPEED有没有更快的代码?我有2200万条记录,使用按函数分组和apply也需要long@LucasDresl不是香草熊猫,但是你应该考虑看<代码> DASK < /COD>数据框。