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这是经过处理的dataFrame,现在我需要单独列出衰退开始、衰退结束和衰退底部的所有季度
在上面的例子中,衰退的开始是‘2000q1’,因为GDP的下降是从那个时候开始的。
衰退结束是‘’2001 q2‘’
衰退底部是'2000q4‘,因为它在开始和结束之间有最小的GDP。
发布于 2017-01-26 22:47:02
在设置数据帧索引的四分之一后,可以使用.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 < first_q) and (third_q < second_q),那么first_q就是衰退的开始。
同样,如果second_q > first_q和third_q > second_q,那么third_q就是衰退的尽头。
基本上,衰退开始是指gdp连续两年下降,衰退结束是指GDP连续两年增长。
发布于 2017-01-26 23:07:32
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 = 10000final_list给出了最终答案。对不起,我不知道熊猫,可能有一些错误。这更像是一个简短的算法。但是你只需要做一点重构就可以把它做好。希望它能对你有所帮助!
另外,我假设当gdp等于或大于衰退开始前的gdp时,衰退就结束了,在你的例子中是10。
https://stackoverflow.com/questions/41875744
复制相似问题