Python 3.x 在数据帧中迭代
我试图在这个列表中找到衰退的开始,当连续两个四分位数下降(-1)时,衰退就会发生。我怎么能买这个?我正在尝试执行双重if来检查行“row”和下一行“row”+1,但找不到键。此外,这个四分位数总是衰退组中的第一个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
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,刚刚编辑了我的帖子以处理连续的正月份。