我想创建一个滚动窗口,并将此窗口中的元素与最近的元素进行比较。实际上,我想从所有其他值中子跟踪最后一个值。例如,如果我们有 Dataframe
df = pd.DataFrame([
[2, 3, 5, 7,],
[8, 3, 6, 1],
[1, 5, 9, 13],
[7, 3, 2, 7],
[12, 4, 1, 0]
])
我想做一个长度为4的滚动窗口,因此在这个特定的例子中,第一个窗口将是[2,8,1,7]。现在最后一个元素(即7)大于2和1但小于8,因此运算的输出将是-1+1-1 = -1(如果大于,则为-1;如果小于,则为+1。如果相等,它并不重要,但让我们给予一个+1)。下一个滚动窗口也是如此。现在,12大于窗口中的所有值,因此操作将返回-3。
理想的输出最终将是:
[NaN, NaN, NaN, NaN]
[NaN, NaN, NaN, NaN]
[NaN, NaN, NaN, NaN]
[-1, 3, -3, 1 ]
[ -3, -1 3, 3 ]
我尝试了pd.rolling().apply()
,也尝试了df.shift
,但无法获得任何结果。
2条答案
按热度按时间mzaanser1#
可以是带有自定义lambda的
rolling.apply
,其中g.iloc[:-1] - g.iat[-1] >= 0
将所有前面的元素与窗口中的最后一个元素进行比较:kqhtkvqz2#
您可以使用numpy的
sliding_window_view
。输出: