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

Pandas 如何确定在特定方向上更改的列值?,pandas,Pandas,我有一个数据框架,由1列周期(年度和季度)和另一列该周期的一些生产率数字组成。我的任务是确定一个时期,例如,我的生产率连续两个季度下降;或者,类似地,连续两个季度的增长。我想我可以使用蛮力,一次只循环几行,但我读到这可能与“shift”函数有关,但我不明白它是如何工作的。谢谢你的帮助 1971q1 1,137.8 1971q2 1,159.4 1971q3 1,180.3 1971q4 1,173.6 1972q1 1,163.8 1972q2

我有一个数据框架,由1列周期(年度和季度)和另一列该周期的一些生产率数字组成。我的任务是确定一个时期,例如,我的生产率连续两个季度下降;或者,类似地,连续两个季度的增长。我想我可以使用蛮力,一次只循环几行,但我读到这可能与“shift”函数有关,但我不明白它是如何工作的。谢谢你的帮助

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 1971q1 1137.8 1971q2 1159.4 1971q3 1180.3 1971q4 1173.6 1972q1 1163.8 1972q2 1140.1 1972q3 1145.8 1972q4 1150.0 试试这个伙计

#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 )
#定义增长率
df['growth_rate']=np.log(df.production)-np.log(df.production).shift(1)
#衰退是指出现两个季度的负增长。
df[‘衰退’]=(df[‘增长率’]<0)和(df[‘增长率’)。移位(1)<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
[450]中的
:df
出[450]:
周期值
0 1971q1 1137.8
11971Q2 1159.4
21971Q3 1180.3
31971Q4 1173.6
4 1972q1 1163.8
51972Q21140.1
61972Q3 1145.8
71972Q4 1150.0
[451]中的名词性符号(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
名称:val,数据类型:float64
在[452]中:df.loc[np.sign(df.val.diff().fillna(0))<0]
Out[452]:
周期值
31971Q4 1173.6
4 1972q1 1163.8
51972Q21140.1

您能提供所需的(预期的)数据集吗?所需的输出不是数据集,而是一个日历周期。问题是:经济衰退是什么时候开始的?或者,经济何时走出衰退?你能说出你的样本(公布的)数据集将处于什么时期吗?PS这些值在不断增长……好吧,为了说明我的观点,我对这些数字做了一些捏造。因此,从1971年第一季度开始,我沿着专栏往下看,从1971年第三季度到1971年第四季度,从1971年第四季度到1972年第一季度,有两次连续下降——这就是衰退的开始。然后我看到,在经济衰退期间,1972年第二季度是最低点。从1972年第二季度开始,我经历了两个同样的增长期,所以我摆脱了经济衰退。我不认为我能把它计算机化,神奇地得到答案,我想如果我能生成一列布尔值,让我看清楚答案,那很好,我想你需要想一想你想要的数据集应该是什么样子,然后把它贴到你的问题上