Python 3.x 了解Python中的滚动窗口

Python 3.x 了解Python中的滚动窗口,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我试图得到第六个元素的值。这是真的,但是换成NaN。我有一个基于Excel的示例。当我尝试滚动窗口6时,我得到了第6条记录的nan,但我应该得到False。然而,当我尝试滚动窗口5时,一切似乎都起作用了。我想了解实际发生的情况,以及6个元素的和积表示滚动窗口6而不是5的最佳方式 目标:连续六个点,全部增加或全部减少 我正在尝试的代码 def condition(x): if x.tolist()[-1] != 0: if ( sum(x

我试图得到第六个元素的值。这是真的,但是换成NaN。我有一个基于Excel的示例。当我尝试滚动窗口6时,我得到了第6条记录的nan,但我应该得到False。然而,当我尝试滚动窗口5时,一切似乎都起作用了。我想了解实际发生的情况,以及6个元素的和积表示滚动窗口6而不是5的最佳方式

目标:连续六个点,全部增加或全部减少

我正在尝试的代码

def condition(x):
             if x.tolist()[-1] != 0:
                 if ( sum(x.tolist()) >= 5 or sum(x.tolist()) <= -5):
                     return 1
                 else:
                     return 0
             else:
                 return 0

df_in['I GET'] = df_in[['lead_one']].rolling(
            window=6).apply(condition  , raw=False)
标记列是所期望的


使用6的滚动窗口时,将采用当前值+前5个值。然后尝试将这6个值相加。我说试试,因为如果有任何nan值,普通python求和也会给你一个na值。 这也是为什么.rollingwindow=5起作用的原因:它获取当前值+4个以前的值,并且由于它们不包含任何nan值,所以实际上在一行之前就得到了一个求和值

您可以使用另一种求和:np.nansum 或者在指定跳过na的位置使用字符串求和,例如:df['column'].sumskipna=True

然而,看看你的代码,我认为它可以改进,所以你没有得到na的第一位。下面是一个使用np的示例,其中:


嗨,Saqib,如果你喜欢我的答案,请投票并接受我的答案?谢谢Sander,但我认为问题是window=5意味着距离当前位置1+5,这就是原因,5在我的情况下起作用。而且我也试过np.nansum让它为我工作。我将很快发布我的答案。
import numpy as np
import pandas as pd

# create example dataframe
df = pd.DataFrame(
    data=[10, 10, 12, 13, 14, 15, 16, 17, 17, 10, 9],
    columns=['value']
)

# create an if/then using np.select
df['n > n+1'] = np.select(
    [df['value'] >  df['value'].shift(1),
     df['value'] == df['value'].shift(1),
     df['value'] < df['value'].shift(1)],
    [1, 0, -1]
)

# take an absolute value of the last 6 values and check if >= 5
df['I GET'] = np.where(
    np.abs(df['n > n+1'].rolling(window=6).sum()) >= 5, 1, 0)