我有一个数据帧DF,下面有两列A和B:
A B
1 0
3 0
4 0
2 1
6 0
4 1
7 1
8 1
1 0
第一部分:应按如下所示执行滑动窗口方法。我需要在3个滑动窗口滑动1个位置的滑动窗口中计算B列的平均值。每个窗口的平均值都是手动计算并显示在左侧。
A: 1 3 4 2 6 4 7 8 1
B: 0 0 0 1 0 1 1 1 0
[0 0 0] 0
[0 0 1] 0.33
[0 1 0] 0.33
[1 0 1] 0.66
[0 1 1] 0.66
[1 1 1] 1
[1 1 0] 0.66
output: 0 0.33 0.33 0.66 0.66 1 1 1 0.66
第二部分:现在,对于A列中的每一行/坐标,将考虑包含坐标的所有窗口,并且应保留最高的平均值,从而得到“输出”列中显示的结果。
第二部分的详细说明:第一部分是计算滑动窗口3中滑动1个位置的平均值。第二步是:对于A列中的每个坐标“i”,应评估包含坐标“i”的所有窗口并保留最高平均分数。例如,在A列中,1仅出现在第一个窗口中,因此1的得分为0(这是第一个窗口的平均值)。类似地,2存在于第一和第二窗口中,因此2的得分应该是window1和window2的得分中最高的,即max(0,0.33333)。同样地,3存在于第一,第二和第三窗口中,因此3的得分是前三个窗口的得分的最大值,即max(0,0.333333,0.3333333)。 4存在于第二,第三和第四窗口中,因此得分为4是这些窗口得分的最大值,即max(0.333333,0.3333333,0.666667)等等。
我需要获得如上所示的输出。输出应该像:
A B Output
1 0 0
3 0 0.33
4 0 0.33
2 1 0.66
6 0 0.66
4 1 1
7 1 1
8 1 1
1 0 0.66
python中的任何帮助都会受到高度赞赏吗?
答案 0 :(得分:1)
对于第一部分,使用numpy
:
WS = 3
B = numpy.array([0,0,0,1,0,1,1,1,0])
filt = numpy.ones(WS) / WS
mean = numpy.convolve(B, filt, 'valid')
第二部分:
paddedmean = numpy.zeros(mean.size + 2 * (WS - 1))
paddedmean[WS-1:-(WS-1)] = mean
output = [numpy.max(paddedmean[i:i+WS]) for i in range(mean.size+WS-1)]
但A
用于???