Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在数据帧中迭代_Python 3.x_Pandas - Fatal编程技术网

Python 3.x 在数据帧中迭代

Python 3.x 在数据帧中迭代,python-3.x,pandas,Python 3.x,Pandas,我试图在这个列表中找到衰退的开始,当连续两个四分位数下降(-1)时,衰退就会发生。我怎么能买这个?我正在尝试执行双重if来检查行“row”和下一行“row”+1,但找不到键。此外,这个四分位数总是衰退组中的第一个 Quarterly GDP change 2007q4 1.0 2008q1 -1.0 2008q2 1.0 2008q3 -1.0 <---This value is the reces

我试图在这个列表中找到衰退的开始,当连续两个四分位数下降(-1)时,衰退就会发生。我怎么能买这个?我正在尝试执行双重if来检查行“row”和下一行“row”+1,但找不到键。此外,这个四分位数总是衰退组中的第一个

   Quarterly  GDP change

  2007q4         1.0

  2008q1        -1.0

  2008q2         1.0

  2008q3        -1.0 <---This value is the recession start

  2008q4        -1.0

  2009q1        -1.0

  2009q2        -1.0
季度GDP变化
2007年第4季度1.0
2008年第一季度-1.0
2008年第2季度1.0

2008年第3季度-1.0假设您的季度列已排序

如果衰退是连续两个时期的负GDP增长,那么我们只寻找小于0的值

mask = df[(df['GDP'].eq(-1) & df['GDP'].eq(-1).shift())].index.min() -1 

df.loc[mask,'change'] = 'recession_start'

  Quarterly  GDP           change
0    2007q4  1.0              NaN
1    2008q1 -1.0              NaN
2    2008q2  1.0              NaN
3    2008q3 -1.0  recession_start
4    2008q4 -1.0              NaN
5    2009q1 -1.0              NaN
6    2009q2 -1.0              NaN

假设您的季度列已排序

如果衰退是连续两个时期的负GDP增长,那么我们只寻找小于0的值

mask = df[(df['GDP'].eq(-1) & df['GDP'].eq(-1).shift())].index.min() -1 

df.loc[mask,'change'] = 'recession_start'

  Quarterly  GDP           change
0    2007q4  1.0              NaN
1    2008q1 -1.0              NaN
2    2008q2  1.0              NaN
3    2008q3 -1.0  recession_start
4    2008q4 -1.0              NaN
5    2009q1 -1.0              NaN
6    2009q2 -1.0              NaN

从DataNoveler的答案中得到启发(我认为这一点很接近,但如果在两个连续的负值之前有很多正值,则不起作用):如果您正在寻找两个连续的负值单元格,我们可以做的是两个单元格窗口的前向滚动求和。要进行正向滚动求和,我们颠倒数据帧的顺序,进行滚动求和,然后将其翻转回来。在这种情况下:

df.loc[:, "Recession"] = df.iloc[::-1].loc[:,"GDP"].rolling(window=2).sum().iloc[::-1].lt(0)

这只会在GDP值为负值的两个连续值的第一个周期中输出“True”。

从DataNearner的答案中获得灵感(我认为这一答案几乎存在,但如果在两个连续的负值之前有很多正值,则不起作用):如果您要查找两个连续的负值单元格,我们可以做的是两个单元格窗口的前向滚动求和。要进行正向滚动求和,我们颠倒数据帧的顺序,进行滚动求和,然后将其翻转回来。在这种情况下:

df.loc[:, "Recession"] = df.iloc[::-1].loc[:,"GDP"].rolling(window=2).sum().iloc[::-1].lt(0)

这将仅在GDP值为负值的两个连续值的第一个期间输出“True”。

nice catch,刚刚编辑了我的帖子以处理连续的正月份。nice catch,刚刚编辑了我的帖子以处理连续的正月份。