是否有方法计算Pandas的滚动平均值并排除最大/最小值?

2024-10-03 17:26:55 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中,我试图计算在求解Rubik立方体时使用的“平均5”或“平均12”统计数据

对于5或Ao5的平均值,将从最近5次求解时间中删除最快和最慢的时间,并计算剩余3次求解时间的平均值

例如,如果我的最后5次是30、10、20、40、80,那么10和80将被排除在外,平均值将根据剩余的3次30、20和40计算得出,Ao5为30

有没有办法在熊猫身上做到这一点,并排除最大和最小的数字(或异常值)?我尝试了多种方法,但都没有成功。如果滚动平均值能够排除异常值,那么它将是完美的

要使用的一些示例数据:

df = pd.DataFrame({'time': {0: 232.74, 1: 157.80, 2: 215.55, 3: 86.91, 4: 187.15, 5: 192.56},
                   'turns': {0: 212, 1: 168, 2: 94, 3: 127, 4: 125, 5: 160}})
df

我试图创建一个Ao5列来存储这个统计数据

在最后一行的Ao5列中,我希望看到最后5个数字的平均值,不包括最大和最小的数字,因此平均值为157.80、187.15、192.56(不包括215.55和86.91)

在最后第二行的Ao5列中,我希望看到最后5个数字的平均值,不包括最大和最小的数字,因此平均值为157.80、215.55、187.15(不包括232.74和86.91)


Tags: 数据方法示例dataframedftime时间数字
1条回答
网友
1楼 · 发布于 2024-10-03 17:26:55

你可以试试这个:

def mean_clipped(data):
    to_calc = data.sort_values()[1:-1]
    return np.mean(to_calc)

df.rolling(5).apply(mean_clipped)

它使用滚动窗口,然后应用自定义聚合函数。在这种情况下,它对窗口中的值进行排序,然后删除第一个和最后一个,然后找到平均值

输出:

         time       turns
0         NaN         NaN
1         NaN         NaN
2         NaN         NaN
3         NaN         NaN
4  186.833333  140.000000
5  179.170000  137.333333

相关问题 更多 >