1

我有一个数据框 DF,两列 A 和 B 如下所示:

A                    B                  
1                    0             
3                    0               
4                    0                   
2                    1                    
6                    0                    
4                    1                     
7                    1                 
8                    1                     
1                    0   

第一部分:应执行滑动窗口方法,如下所示。我需要在大小为 3 的滑动窗口中计算 B 列的平均值,滑动 1 个位置。每个窗口的平均值都是手动计算的,并显示在左侧。

    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.

我需要获得如上所示的输出。输出应该像:

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 的任何帮助将不胜感激?

4

1 回答 1

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用???

于 2013-04-12T17:14:25.780 回答