我有一个[0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0 , 0 , 1].
形式的Pandas系列
0: indicates economic increase.
1: indicates economic decline.
衰退的信号是连续两次下降(1)。
连续两次增长(0)表明衰退结束。
在上面的数据集中,我有两次衰退,开始于指数3,结束于指数5,开始于指数8,结束于指数11。
我不知道如何处理Pandas的问题。我想确定经济衰退开始和结束的指数。任何帮助都将不胜感激。
下面是我的python尝试的一个解决方案。
np_decline = np.array([0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0 , 0 , 1])
recession_start_flag = 0
recession_end_flag = 0
recession_start = []
recession_end = []
for i in range(len(np_decline) - 1):
if recession_start_flag == 0 and np_decline[i] == 1 and np_decline[i + 1] == 1:
recession_start.append(i)
recession_start_flag = 1
if recession_start_flag == 1 and np_decline[i] == 0 and np_decline[i + 1] == 0:
recession_end.append(i - 1)
recession_start_flag = 0
print(recession_start)
print(recession_end)
这是一个更以Pandas为中心的方法吗?
6条答案
按热度按时间kxeu7u2r1#
一串1的开始满足条件
也就是说,运行开始时的值为1,前一个值不为1,下一个值为1。类似地,运行结束时满足条件
因为一轮结束时的值为1,接下来的两个值value为0。我们可以使用
np.flatnonzero
查找满足这些条件的索引:收益率
67up9zun2#
您可以使用
shift
:rekjcdws3#
使用
shift
的想法类似,但将结果写成单个布尔列:结果输出:
jhdbpxl94#
使用
rolling(2)
我减去
.5
,所以rolling
的和在衰退开始时是1
,在衰退停止时是-1
。由于
1
和-1
的计算结果均为True
,因此我可以将滚动信号屏蔽为仅开始和停止以及ffill
。使用gt(0)
获取它们何时为正或负的真值。sgtfey8w5#
您可以使用scipy.signal.find_peaks来解决这个问题。
b5buobof6#
输出: