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