Python 获得衰退开始和结束的季度以及最低gdp季度

Python 获得衰退开始和结束的季度以及最低gdp季度,python,pandas,Python,Pandas,这是经过处理的数据框,现在我需要一个单独的列表,列出衰退开始、结束和衰退底部的所有季度 在上面的例子中,衰退的开始是“2000年第一季度”,因为GDP从那时开始下降 衰退结束时间为“2001年第二季度” 衰退底部为“2000q4”,因为它在开始和结束之间具有最小GDP您可以在设置数据帧索引的季度后使用.loc属性 Quarter: GDP: GDP change: change 1999q3 9 -- ------ 1999q4 10

这是经过处理的数据框,现在我需要一个单独的列表,列出衰退开始、结束和衰退底部的所有季度

在上面的例子中,衰退的开始是“2000年第一季度”,因为GDP从那时开始下降

衰退结束时间为“2001年第二季度”


衰退底部为“2000q4”,因为它在开始和结束之间具有最小GDP

您可以在设置数据帧索引的季度后使用.loc属性

Quarter:    GDP:   GDP change:  change
1999q3     9           --         ------
1999q4    10           1          increase
2000q1     9          -1          decline
2000q2     8          -1          decline
2000q3     7          -1          decline
2000q4     6          -1          decline
2001q1     8           1          increase
2001q2     11          3          increase
2001q3     12          1          increase
您可以使用以下语句使四分之一成为数据帧的索引

Df.loc[start:end]
希望有帮助

正如你所问,你如何找到衰退的开始和其他参数。以下是您可以使用的代码:

Df = Df.set_index('quarter')
现在的逻辑是:(如果第二个 同样,如果第二次>第一次>第三次>第二次,那么第三次就是衰退的结束

基本上,衰退开始是连续出现两个gdp下降年,衰退结束是连续出现两个gdp增长年
for index in df.index:
      first_q = df.loc[index, 'gdp']
      second_q = df.loc[index+1, 'gdp']
      third_q = df.loc[index +2, 'gdp']
衰退与gdp=0 季度={'start':无,'end':无,'min':无} 最低国内生产总值=10000 最终清单=[] 对于i,在frame.iterrows()中的行: 如果行['change']<0且未启动: 衰退开始=真 衰退(国内生产总值)=框架[i-1][“国内生产总值”] 季度['start']=行['quarter'] 如果行['gdp']=衰退\u gdp: 季度['end']=行['quarter'] 最终清单。追加(季度) #重置所有值 衰退开始=错误 衰退与gdp=0 季度={'start':无,'end':无,'min':无} 最小四分之一=无 最低国内生产总值=10000 最终列表有最终答案。对不起,我不认识熊猫,可能有一些错误。这更像是一个简单的算法。。但是,只需进行一点重构,您就可以正确地完成它。希望对你有帮助


另外,我假设当gdp等于或大于衰退开始前的gdp时,衰退结束,在你的例子中是10。

实际上,问题是我如何找到哪个季度是衰退开始季度,哪个季度是相应的衰退结束季度这是最近一个非常流行的问题(作业问题?)“在上面的例子中,衰退的开始是‘2000q1’,因为GDP从那时开始下降”。大多数关于衰退开始的定义都是“GDP连续两个季度下降”。重复的。这几乎是同一个用户一天前提出的同一个问题。
recession_start = False
recession_gdp = 0
quarter = {'start': None, 'end': None, 'min': None}
min_gdp = 10000


final_list = []


for i, row in frame.iterrows():

    if row['change'] < 0 and not recession_start:
        recession_start = True
        recession_gdp = frame[i - 1]['gdp']
        quarter['start'] = row['quarter']

    if row['gdp'] < min_gdp and recession_start:
        min_gdp = row['gdp']
        quarter['min'] = row['quarter']

    if recession_start and row['gdp'] >= recession_gdp:
        quarter['end'] = row['quarter']
        final_list.append(quarter)
        # reset all values
        recession_start = False
        recession_gdp = 0
        quarter = {'start': None, 'end': None, 'min': None}

        min_quarter = None
        min_gdp = 10000