【发布时间】:2016-11-18 02:59:21
【问题描述】:
我有一个以美国季度 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_val_2
.rolling().apply() 将遍历整个数据帧,一次 3 个值,所以让我们看一下从索引位置 6 开始的一个特定窗口:
GDP
6 8 # <- gdp_val
7 2 # <- gdp_val_1
8 3 # <- gdp_val_2
如何在当前窗口中访问 gdp_val、gdp_val_1 和 gdp_val_2?
【问题讨论】:
-
您的问题不清楚。您的数据的小样本和预期的结果将有很大帮助。请阅读MCVE。
-
The docs 表示函数
Must produce a single value from an ndarray input...。因此,您只需将其编入 索引即可。我想这是通过的第一个位置参数。编写一个虚拟函数来打印传递的内容。 -
在函数中试试
numpy.all(a[1:] < a[:-1])。 -
是的,二战,事实证明它就像 arr[0]、arr[1]、arr[2] 一样简单。我没有意识到使用 df.rolling().apply(lambda x: my_function(x)) 会将窗口元素列表传递给 my_function()。
标签: python pandas dataframe window apply