Python 如何使用滑动窗口滚动求和

Python 如何使用滑动窗口滚动求和,python,pandas,Python,Pandas,我想用滑动窗口计算总和或其他计算。 例如,我想从A为真的当前位置计算最后10个数据点的和。 有办法做到这一点吗? 这样,它就不会返回我期望的值 我把期望值和计算放在一边 多谢各位 In [63]: dt['As'] = pd.rolling_sum( dt.Val[ dt.A == True ], window=10, min_periods=1) In [64]: dt Out[64]: Val A B As 0 1 NaN NaN NaN 1

我想用滑动窗口计算总和或其他计算。 例如,我想从A为真的当前位置计算最后10个数据点的和。 有办法做到这一点吗? 这样,它就不会返回我期望的值

我把期望值和计算放在一边

多谢各位

In [63]: dt['As'] = pd.rolling_sum( dt.Val[ dt.A == True ], window=10, min_periods=1)

In [64]: dt
Out[64]:
    Val     A     B  As
0     1   NaN   NaN NaN
1     1   NaN   NaN NaN
2     1   NaN   NaN NaN
3     1   NaN   NaN NaN
4     6   NaN  True NaN
5     1   NaN   NaN NaN
6     2  True   NaN   1  pos 6 = 2
7     1   NaN   NaN NaN
8     3   NaN   NaN NaN
9     9  True   NaN   2  pos 9 + pos 6 = 11
10    1   NaN   NaN NaN
11    9   NaN   NaN NaN
12    1   NaN   NaN NaN
13    1   NaN  True NaN
14    1   NaN   NaN NaN
15    2  True   NaN   3  pos 15 + pos 9 + pos 6 = 13
16    1   NaN   NaN NaN
17    8   NaN   NaN NaN
18    1   NaN   NaN NaN
19    5  True   NaN   4  pos 19 + pos 15 = 7
20    1   NaN   NaN NaN
21    1   NaN   NaN NaN
22    2   NaN   NaN NaN
23    1   NaN   NaN NaN
24    7   NaN  True NaN
25    1   NaN   NaN NaN
26    1   NaN   NaN NaN
27    1   NaN   NaN NaN
28    3  True   NaN   5 pos 28 + pos 19 = 8
这几乎可以做到

import numpy as np
import pandas as pd
dt = pd.read_csv('test2.csv')

dt['AVal'] = dt.Val[dt.A == True]
dt['ASum'] = pd.rolling_sum( dt.AVal, window=10, min_periods=1)
dt['ACnt'] = pd.rolling_count( dt.AVal, window=10)

In [4]: dt
Out[4]:
    Val     A     B  AVal  ASum  ACnt
0     1   NaN   NaN   NaN   NaN     0
1     1   NaN   NaN   NaN   NaN     0
2     1   NaN   NaN   NaN   NaN     0
3     1   NaN   NaN   NaN   NaN     0
4     6   NaN  True   NaN   NaN     0
5     1   NaN   NaN   NaN   NaN     0
6     2  True   NaN     2     2     1
7     1   NaN   NaN   NaN     2     1
8     3   NaN   NaN   NaN     2     1
9     9  True   NaN     9    11     2
10    1   NaN   NaN   NaN    11     2
11    9   NaN   NaN   NaN    11     2
12    1   NaN   NaN   NaN    11     2
13    1   NaN  True   NaN    11     2
14    1   NaN   NaN   NaN    11     2
15    2  True   NaN     2    13     3
16    1   NaN   NaN   NaN    11     2
17    8   NaN   NaN   NaN    11     2
18    1   NaN   NaN   NaN    11     2
19    5  True   NaN     5     7     2
20    1   NaN   NaN   NaN     7     2
21    1   NaN   NaN   NaN     7     2
22    2   NaN   NaN   NaN     7     2
23    1   NaN   NaN   NaN     7     2
24    7   NaN  True   NaN     7     2
25    1   NaN   NaN   NaN     5     1
26    1   NaN   NaN   NaN     5     1
27    1   NaN   NaN   NaN     5     1
28    3  True   NaN     3     8     2
但是需要为ASum中的所有值计算NaN,并计算A是NaN的位置
是这样做的吗?

你只是在做一个求和,还是这是一个更复杂问题的简化示例

如果它只是一个和,那么你可以混合使用
fillna()
,以及
True
False
np.sum
中的作用类似于1和0的事实:

In [8]: pd.rolling_sum(dt['A'].fillna(False), window=10,
                       min_periods=1)[dt['A'].fillna(False)]
Out[8]: 
6     1
9     2
15    3
19    2
28    2
dtype: float64

是的,值1只是为了简单。它可以是任何大于0的数字。我重新编辑了样本数据。非常感谢。