【问题标题】:Getting the quarter where recession start and recession ends along with the quarter of minimum gdp获取衰退开始和衰退结束的季度以及最低 gdp 的季度
【发布时间】:2017-01-26 23:07:31
【问题描述】:
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

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

上例中衰退的开始是 '2000q1',因为 GDP 下降开始于那个时候

衰退结束是''2001q2'

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

【问题讨论】:

标签: python pandas


【解决方案1】:

你可以在设置数据框索引的季度后使用 .loc 属性。

Df.loc[start:end]

您可以使用以下语句将季度设为数据框的索引

Df = Df.set_index('quarter')

希望对您有所帮助。

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

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']

现在的逻辑是:(如果 second_q

同样,如果 second_q > first_q 并且third_q > second_q 那么third_q 就是衰退结束。

基本上衰退开始是存在连续 2 个 GDP 下降年份,衰退结束是存在连续两个 GDP 增长年份

【讨论】:

  • 其实问题是我怎么能找到哪个季度是衰退开始季度,哪个是相应的衰退结束季度
【解决方案2】:
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

final_list 有最终答案。对不起,我不知道熊猫,可能会有一些错误。这更像是一个简短的算法.. 但您只需稍作重构即可将其正确化。希望对你有帮助!..

此外,我假设当 GDP 等于或大于“就在”衰退开始之前的 GDP(在您的示例中为 10)时,衰退结束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多