熊猫滚动窗口获得最小值

时间:2019-12-02 09:30:01

标签: python-3.x pandas

我有一个包含6169个时序数据点的数据集。我正在尝试在某个滚动窗口内找到最小值。在这种情况下,窗口为396(略大于一年)。我在下面使用pandas滚动功能编写了以下代码。但是,当我运行代码时,最终得到的值比我应该得到的多得多。我的意思是我应该以6169/396 = 15或16个值结束。但是,我得到了258个值。任何想法为什么?为了了解数据,我发布了一个图表。我已经标记了一些红色的圆点,应该观察到这些圆点,并且通过观察图形,它绝对不能捕获到那么多的圆点。我的代码行有什么问题吗?

m4_minidx = df['fitted.values'].rolling(window = 396).min() == df['fitted.values']
m4_min = df[m4_minidx]
print(df.shape)
print(m4_min.shape)

output:
(6169, 5)
(258, 5)

enter image description here

1 个答案:

答案 0 :(得分:2)

问题在于滚动窗口,您每次都会获得局部最小值。这是一张草图来解释:

enter image description here

黑线是移动窗口,而红线是局部最小值。

您要解决的问题稍微复杂一些,发现局部最小值通常并不容易。查看以下其他资源:local minima x-ylocal minima 1d arraypeak finder in scipy library

=============编辑=================

如果您的数据框中没有重复,您将获得预期的结果:

x = np.random.random(6169)
df = pd.DataFrame({'fitted.values': x})

m4_minidx = df['fitted.values'].rolling(window = 396).min() == df['fitted.values']
m4_min = df[m4_minidx]
print(df.shape)
print(m4_min.shape)

输出:

(6169, 1)
(14, 1)