【问题标题】:New variable that connects year and quarter连接年份和季度的新变量
【发布时间】:2018-05-21 20:52:38
【问题描述】:

您好,我是 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

【问题讨论】:

  • 如果我理解正确,你能做类似的事情:df['new_variable] = df['year'] + df['quarter']?这些值与您的输出值不同,但听起来可以吗?
  • 谢谢 john 的提问,这不行,因为它们必须是连续的数字

标签: python pandas date numpy datetime


【解决方案1】:

我的解决方案扩展了@johnchase 的想法:从year 的笛卡尔积通过quarter 构建字典映射,将字符串表示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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多