如何确定在特定方向上更改的列值?

时间:2016-11-05 23:45:46

标签: pandas

我有一个由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

2 个答案:

答案 0 :(得分:2)

试试这个好友

#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 )

答案 1 :(得分:1)

我仍然不太清楚你想要的数据集应该如何。

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

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