2016-11-05 47 views
1

我有一个数据框包含1列的时期(年和季度)和另一列的那个时期的一些生产力数字。我的任务是确定一个时期,例如,我连续两个季度的生产力下降;或者类似地,连续两个季度增长。我想我可以使用蛮力,只是一次循环查看几行,但我读到这可能与“移位”功能有关 - 但我不明白它是如何工作的。感谢您的帮助如何确定列值在特定方向上变化?

 
    1971q1 1,137.8 
    1971q2 1,159.4 
    1971q3 1,180.3 
    1971q4 1,173.6 
    1972q1 1,163.8 
    1972q2 1,140.1 
    1972q3 1,145.8 
    1972q4 1,150.0 
+0

可你[文章](http://stackoverflow.com/posts/40444498/edit)所需的(预期的)数据集? – MaxU

+0

期望的输出不是数据集,而是日历期。问题是:经济衰退何时开始?或者,经济何时走出衰退? – alernerdev

+0

你可以说你的样本(发布)数据集是什么时期? PS的价值是不断成长... – MaxU

回答

1

试试这个哥们

#define a growth rate 
df['growth_rate'] = np.log(df.production) - np.log(df.production).shift(1) 
#a recession is when there have been two quarters of negative growth. 
df['recession'] = (df['growth_rate'] < 0) & (df['growth_rate'].shift(1) < 0) 
0

它仍然不是很清楚,我想要的数据集应该是什么样子等。

下面是这有助于识别方法的增长和下降:

In [450]: df 
Out[450]: 
    period  val 
0 1971q1 1137.8 
1 1971q2 1159.4 
2 1971q3 1180.3 
3 1971q4 1173.6 
4 1972q1 1163.8 
5 1972q2 1140.1 
6 1972q3 1145.8 
7 1972q4 1150.0 

In [451]: np.sign(df.val.diff().fillna(0)) 
Out[451]: 
0 0.0 
1 1.0 
2 1.0 
3 -1.0 
4 -1.0 
5 -1.0 
6 1.0 
7 1.0 
Name: val, dtype: float64 

In [452]: df.loc[np.sign(df.val.diff().fillna(0)) < 0] 
Out[452]: 
    period  val 
3 1971q4 1173.6 
4 1972q1 1163.8 
5 1972q2 1140.1