在一维中查找pandas数据帧中相同项的连贯组

时间:2017-11-16 17:14:23

标签: python pandas dataframe

假设我有以下包含美国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。抱歉,这种含糊不清!

2 个答案:

答案 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