我有一个以美国季度GDP为列值的数据框架。我想看一下这些值,一次3个,然后找出接下来连续两个季度GDP下降的指数。这意味着我需要将df['GDP']中的各个元素按3组进行相互比较。
下面是一个示例数据框。

df = pd.DataFrame(data=np.random.randint(0,10,10), columns=['GDP'])
df

    GDP
0   4
1   4
2   4
3   1
4   4
5   4
6   8
7   2
8   3
9   9

我正在使用df.rolling().apply(find_recession),但我不知道如何在find_recession()函数中访问滚动窗口的各个元素。
gdp['Recession_rolling'] = gdp['GDP'].rolling(window=3).apply(find_recession_start)

如何在滚动窗口中访问各个元素,以便进行比较,例如gdp值2.rolling().apply()将遍历整个数据帧,一次3个值,因此让我们看看一个特定的窗口,它从索引位置6开始:
   GDP
6  8   # <- gdp_val
7  2   # <- gdp_val_1
8  3   # <- gdp_val_2

如何在当前窗口中访问gdp值、gdp值1和gdp值2?

最佳答案

在.apply()中使用lambda表达式将向自定义函数(find_reception_start)传递一个数组,这样我就可以像访问任何列表/数组一样访问元素,例如arr[0], arr[1], arr[2]

df = pd.DataFrame(data=np.random.randint(0,10,10), columns=['GDP'])

def my_func(arr):
    if((arr[2] < arr[1]) & (arr[1] < arr[0])):
        return 1
    else:
        return 0

df['Result'] = df.rolling(window=3).apply(lambda x: my_func(x))
df

    GDP Result
0   8   NaN
1   0   NaN
2   8   0.0
3   1   0.0
4   9   0.0
5   7   0.0
6   9   0.0
7   8   0.0
8   3   1.0
9   9   0.0

08-19 22:03