连接年份和季度的新变量

时间:2017-12-07 17:12:09

标签: python pandas date numpy datetime

您好我是stata用户,我正在尝试将我的代码传递给Pandas。我有一个面板数据,如下所示,我正在寻找一个命令,可以根据行所在的年份和季度创建一个常量变量。在stata中,这样的命令将由gen new_variable = yq(year,quarter)再现

我的数据框看起来像这样

id     year    quarter   
 1    2007          1     
 1    2007          2     
 1    2007          3     
 1    2007          4     
 1    2008          1     
 1    2008          2     
 1    2008          3     
 1    2008          4     
 1    2009          1     
 1    2009          2     
 1    2009          3     
 1    2009          4     
 2    2007          1     
 2    2007          2     
 2    2007          3     
 2    2007          4     
 2    2008          1     
 2    2008          2     
 2    2008          3     
 2    2008          4     
 3    2009          2     
 3    2009          3     
 3    2010          2     
 3    2010          3   

我的预期输出应该如下所示:( new_variable中的值是任意的,只是寻找一个常数值,每年和季度和连续值总是相同的)

id     year    quarter   new_variable
 1    2007          1     220             
 1    2007          2     221          
 1    2007          3     222      
 1    2007          4     223            
 1    2008          1     224      
 1    2008          2     225      
 1    2008          3     226       
 1    2008          4     227      
 1    2009          1     228       
 1    2009          2     229       
 1    2009          3     230      
 1    2009          4     231      
 2    2007          1     220             
 2    2007          2     221           
 2    2007          3     222       
 2    2007          4     223             
 2    2008          1     224       
 2    2008          2     225       
 2    2008          3     226       
 2    2008          4     227       
 3    2009          2     229       
 3    2009          3     230
 3    2010          2     233
 3    2010          3     234

1 个答案:

答案 0 :(得分:1)

我的解决方案扩展了@johnchase的思想:从yearquarter的笛卡尔积生成一个字典映射,将字符串表示形式year + quarter转换为整数。

ys = df['year'].unique()
qs =  df['quarter'].unique()
new_idx = pd.MultiIndex.from_product([ys, qs], names=['year', 'quarter'])

yq = [''.join([str(a), str(b)]) for a, b in new_idx.values]
# yq
# ['20071', '20072', '20073', '20074', 
# '20081', '20082', '20083', '20084', 
# '20091', '20092', '20093', '20094', 
# '20101', '20102', '20103', '20104']

mapper = {k:i+220 for i, k in enumerate(yq)}

df['new_variable'] = df['year'].astype(str) + df['quarter'].astype(str)
df['new_variable'] = df['new_variable'].map(mapper)

df
    id  year  quarter  new_variable
0    1  2007        1           220
1    1  2007        2           221
2    1  2007        3           222
3    1  2007        4           223
4    1  2008        1           224
5    1  2008        2           225
6    1  2008        3           226
7    1  2008        4           227
8    1  2009        1           228
9    1  2009        2           229
10   1  2009        3           230
11   1  2009        4           231
12   2  2007        1           220
13   2  2007        2           221
14   2  2007        3           222
15   2  2007        4           223
16   2  2008        1           224
17   2  2008        2           225
18   2  2008        3           226
19   2  2008        4           227
20   3  2009        2           229
21   3  2009        3           230
22   3  2010        2           233
23   3  2010        3           234