Cod*_*orf 5 python window apply dataframe pandas
我有一个以季度美国 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
Run Code Online (Sandbox Code Playgroud)
我正在使用df.rolling().apply(find_recession),但我不知道如何在我的find_recession()函数中访问滚动窗口的各个元素。
gdp['Recession_rolling'] = gdp['GDP'].rolling(window=3).apply(find_recession_start)
Run Code Online (Sandbox Code Playgroud)
如何访问滚动窗口中的单个元素,以便进行 gdp_val_2 < gdp_val_1 < gdp_val 之类的比较?
.rolling().apply() 将遍历整个数据帧,一次 3 个值,所以让我们看看一个特定的窗口,它从索引位置 6 开始:
GDP
6 8 # <- gdp_val
7 2 # <- gdp_val_1
8 3 # <- gdp_val_2
Run Code Online (Sandbox Code Playgroud)
如何在当前窗口中访问 gdp_val、gdp_val_1 和 gdp_val_2?
简短的答案是:您不能,但您可以利用有关数据框/系列结构的知识。
您知道窗口的大小,也知道当前索引 - 因此,您可以输出相对于当前索引的移位:
让我们假设,这是您的 GDP:
In [627]: gdp
Out[627]:
0 8
1 0
2 0
3 4
4 0
5 3
6 6
7 2
8 5
9 5
dtype: int64
Run Code Online (Sandbox Code Playgroud)
天真的方法只是返回(argmin() - 2)并将其添加到当前索引:
In [630]: gdp.rolling(window=3).apply(lambda win: win.argmin() - 2) + gdp.index
Out[630]:
0 NaN
1 NaN
2 1.0
3 1.0
4 2.0
5 4.0
6 4.0
7 7.0
8 7.0
9 7.0
dtype: float64
Run Code Online (Sandbox Code Playgroud)
天真的方法不会返回正确的结果,因为您无法预测当值相等以及中间出现上升时它将返回哪个索引。但你明白这个想法。
| 归档时间: |
|
| 查看次数: |
2882 次 |
| 最近记录: |