Python 如何创建滑动窗口并在数据帧中应用函数
我有以下数据帧:Python 如何创建滑动窗口并在数据帧中应用函数,python,pandas,dataframe,window-functions,pandasql,Python,Pandas,Dataframe,Window Functions,Pandasql,我有以下数据帧: Time A 1 1 2 1 3 1 4 1 5 2 6 2 7 3 8 3 9 2 10 1 11 1 12 1 13 3 14 3 15 3 需要创建一个长度为3的滑动窗口,在时间列上滑动2步,并对a列应用一些costment函数(为了
Time A
1 1
2 1
3 1
4 1
5 2
6 2
7 3
8 3
9 2
10 1
11 1
12 1
13 3
14 3
15 3
需要创建一个长度为3的滑动窗口,在时间列上滑动2步,并对a列应用一些costment函数(为了这个示例,让我们假设mean和max)
它的r等价物是
dat %>% dplyr::mutate(SMA_A=rollapplyr(A, 3, mean ,by = 2,align ="center", partial=TRUE, fill=NA),
Max_A =rollapplyr(A, 3, max ,by=2, align ="center", partial=TRUE,fill=NA)
)
预期产出:
Time A SMA_A Max_A
1 1 1.000000 1
2 1 NA NA
3 1 1.000000 1
4 1 NA NA
5 2 1.666667 2
6 2 NA NA
7 3 2.666667 3
8 3 NA NA
9 2 2.000000 3
10 1 NA NA
11 1 1.000000 1
12 1 NA NA
13 3 2.333333 3
14 3 NA NA
15 3 3.000000 3
或者不使用NAs,您可以执行以下操作:
余数==1
来获取每2个索引行,这意味着它是一个不均匀数 Time A Max_A
0 1 1.000000 1.0
1 2 NaN NaN
2 3 1.000000 1.0
3 4 NaN NaN
4 5 1.666667 2.0
5 6 NaN NaN
6 7 2.666667 3.0
7 8 NaN NaN
8 9 2.000000 3.0
9 10 NaN NaN
10 11 1.000000 1.0
11 12 NaN NaN
12 13 2.333333 3.0
13 14 NaN NaN
14 15 3.000000 3.0
您需要
df.set_index('Time').rolling(3)['A'].mean()
?@Erfan-这似乎更复杂。您可以提供预期的输出吗?@Erfan对代码进行了编辑
Time A Max_A
0 1 1.000000 1.0
1 2 NaN NaN
2 3 1.000000 1.0
3 4 NaN NaN
4 5 1.666667 2.0
5 6 NaN NaN
6 7 2.666667 3.0
7 8 NaN NaN
8 9 2.000000 3.0
9 10 NaN NaN
10 11 1.000000 1.0
11 12 NaN NaN
12 13 2.333333 3.0
13 14 NaN NaN
14 15 3.000000 3.0