假设我有以下包含美国GDP数据的pandas数据框。列Change
包含从四分之一到四分之一的绝对更改值,列Trend
只是一个噱头,可以使趋势更改更加明显。
GDP Change Trend
Quarter
2007q4 14991.8 53.3 up
2008q1 14889.5 -102.3 down
2008q2 14963.4 73.9 up
2008q3 14891.6 -71.8 down
2008q4 14577.0 -314.6 down
2009q1 14375.0 -202.0 down
2009q2 14355.6 -19.4 down
2009q3 14402.5 46.9 up
2009q4 14541.9 139.4 up
2010q1 14604.8 62.9 up
我想要实现的是找到经济衰退开始的季度。经济衰退的定义是GDP连续两个季度下降。我确信这个任务可以通过遍历行来解决,但我想知道是否有更多的可移植的矢量化方式。我使用df.rolling()
尝试了一些事情,但我似乎无法找到方法。非常感谢帮助!
编辑:在上面的例子中,经济衰退的开始将是2008q3。抱歉,这种含糊不清!
答案 0 :(得分:3)
尝试
((df['Change'].shift() < 0) &(df['Change'].shift(2) < 0)).idxmax()
你得到了
'2009q1'
对于编辑,只需稍微调整条件
((df['Change'] < 0) &(df['Change'].shift(-1) < 0)).idxmax()
你得到了
'2008q3'
答案 1 :(得分:2)
使用shift
:
df['Trend2']=df['Trend'].shift(-1)
df['recession']= np.logical_and(df.Trend=='down',df.Trend2=='down')
2007q4 False
2008q1 False
2008q2 False
2008q3 True
2008q4 True
2009q1 True
2009q2 False
2009q3 False
2009q4 False
2010q1 False