Python 如果(i+;1)大于(i),则在4个窗口(以前的读数)中标记观察值
我有降雨时间序列,如:Python 如果(i+;1)大于(i),则在4个窗口(以前的读数)中标记观察值,python,pandas,flags,Python,Pandas,Flags,我有降雨时间序列,如: rainfall 0 3.1 1 2 2 0 3 0 4 12 5 0 6 1 7 2 8 3 9 6 10 1 11 2 12 9 我想使用python pandas来标记一个观测值,该观测值的前4个读数满足以下条件:对于范围内的每个I(len(观测值))==>I+1>I 预期输出如下所示: rainfall Flag test 0 3.1 F 1 2 F 2 0 F 3 0 F 4
rainfall
0 3.1
1 2
2 0
3 0
4 12
5 0
6 1
7 2
8 3
9 6
10 1
11 2
12 9
我想使用python pandas来标记一个观测值,该观测值的前4个读数满足以下条件:对于范围内的每个I(len(观测值))==>I+1>I
预期输出如下所示:
rainfall Flag test
0 3.1 F
1 2 F
2 0 F
3 0 F
4 12 F
5 0 F
6 1 F
7 2 F
8 3 T
9 6 T
10 1 F
11 2 F
12 9 F
其中,它仅返回第9行的T,前3行有此情况
我想知道是否有人能帮我 使用,然后通过以下方式获得差异,比较并最后检查每行的所有True
s:
你能添加预期的输出吗?降雨标志测试0 3.1 F 1 2 F 2 0 F 3 0 F 4 12 F 5 0 F 6 1 F 7 2 F 8 3 F 9 6 T 10 1 F 11 2 F 12 9 F你能添加到问题中吗,因为评论格式不好?谢谢,只有一个是正确的,你能解释为什么,你是如何得到它的吗?不确定是否理解
之前的4个阅读资料
这只是我添加的一个示例。之所以只有一个是正确的,是因为这是前三个(第六、第七和第八个)的唯一观察条件(i+1>i)
N = 4
x = np.concatenate([[np.nan] * (N-1), df['rainfall'].values])
def rolling_window(a, window):
shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
strides = a.strides + (a.strides[-1],)
return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
arr = rolling_window(x, N)
print (arr)
[[ nan nan nan 3.1]
[ nan nan 3.1 2. ]
[ nan 3.1 2. 0. ]
[ 3.1 2. 0. 0. ]
[ 2. 0. 0. 12. ]
[ 0. 0. 12. 0. ]
[ 0. 12. 0. 1. ]
[12. 0. 1. 2. ]
[ 0. 1. 2. 3. ]
[ 1. 2. 3. 6. ]
[ 2. 3. 6. 1. ]
[ 3. 6. 1. 2. ]
[ 6. 1. 2. 9. ]]
df['flag'] = (np.diff(arr, axis=1) > 0).all(axis=1)
print (df)
rainfall flag
0 3.1 False
1 2.0 False
2 0.0 False
3 0.0 False
4 12.0 False
5 0.0 False
6 1.0 False
7 2.0 False
8 3.0 True
9 6.0 True
10 1.0 False
11 2.0 False
12 9.0 False