2016-11-05 17 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