【问题标题】:Dataframe: Finding 2 consecutive quarters of GDP decline to find recession start数据框:发现GDP连续两个季度下降以发现衰退开始
【发布时间】:2020-08-21 19:09:53
【问题描述】:

我试图找出 GDP 连续两个季度下降的情况,以找出衰退的开始。数据框如下:

Quarter GDP(2009 Unchained)
2000q1     20
2000q2     19
2000q3     18
2000q4     17
2001q1     16
2001q2     17
2001q3     18
2001q4     19

我写了以下代码:

def start()
GDP.columns = ['Quarter', 'GDP (2009 chained)']
    GDP = GDP.set_index('Quarter')
    #GDP['Quarterly Change'] = GDP['GDP (2009 chained)'].diff()
    
    for index in GDP.index:
        first_q = GDP.loc[index, 'GDP (2009 chained)']
        second_q = GDP.loc[index+1, 'GDP (2009 chained)']
        third_q = GDP.loc[index+2, 'GDP (2009 chained)']
        if (second_q < first_q) and (third_q < second_q): start = first_q
    
    return start

但我收到此错误:

---> 16         second_q = GDP.loc[index+1, 'GDP (2009 chained)']
     17         third_q = GDP.loc[index+2, 'GDP (2009 chained)']
     18         if (second_q < first_q) and (third_q < second_q): start = first_q

TypeError: must be str, not int

大概是因为您不能对索引 +1,因为索引是字符串标签而不是整数 - 我该如何更正我的代码?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:
    df = pd.DataFrame({'Quarter': ['2000q1', '2000q2', '2000q3', '2000q4', '2001q1', '2001q2', '2001q3', '2001q4'],
                      'GDP(2009 Unchained)': [20, 19, 18, 17, 16, 17, 18, 19]})
    print(df)
    
      Quarter  GDP(2009 Unchained)
    0  2000q1                   20
    1  2000q2                   19
    2  2000q3                   18
    3  2000q4                   17
    4  2001q1                   16
    5  2001q2                   17
    6  2001q3                   18
    7  2001q4                   19
    

    一组连续的真值表示衰退期

    df['Recession'] = (df['GDP(2009 Unchained)']>df['GDP(2009 Unchained)'].shift(-1)) & (df['GDP(2009 Unchained)'].shift(-1)>df['GDP(2009 Unchained)'].shift(-2))
    print(df)
    
      Quarter  GDP(2009 Unchained)  Recession
    0  2000q1                   20       True
    1  2000q2                   19       True
    2  2000q3                   18       True
    3  2000q4                   17      False
    4  2001q1                   16      False
    5  2001q2                   17      False
    6  2001q3                   18      False
    7  2001q4                   19      False
    

    【讨论】:

      猜你喜欢
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多