数据帧的排序子数组的滚动平均值

给定一个大的多列 Pandas 数据框,我想尽快计算N元素窗口上的滚动“k-mean” 。
这里“k-mean”定义为排除最大和最小元素的N-2k元素的均值。Nkk

例子

给定数据框:

df = pandas.DataFrame(
{'A': [34, 78, -2, -96, 58, -34, 44, -50, 42],
 'B': [-82, 28, 96, 46, 36, -34, -20, 10, -40]})

    A   B
0  34 -82
1  78  28
2  -2  96
3 -96  46
4  58  36
5 -34 -34
6  44 -20
7 -50  10
8  42 -40

随着N=6k=1预期输出是:

      A     B
0   NaN   NaN
1   NaN   NaN
2   NaN   NaN
3   NaN   NaN
4   NaN   NaN
5  14.0  19.0
6  16.5  22.5
7 -10.5  18.0
8   0.5  -2.0

试图

我的代码似乎符合要求:

def k_mean(s: pandas.Series, trim: int) -> float:
    assert trim >= 0, f"Trim must not be negative, {trim} provided."
    if trim == 0:
        return s.mean()
    return s.sort_values()[trim:-trim].mean()

df.rolling(window=6, axis=0).apply(k_mean, kwargs={'trim': 1})

我的问题:我的代码是否正确,如果正确,是否有更快的方法来实现相同的结果,尤其是考虑到大型多列数据帧?
也许有一个巧妙的数学技巧可以提供帮助?

如果它有助于加快性能,我并不太关心起始期的处理,要么可以是 NaN 直到N或可以增长到N一旦2k+1元素在窗口中。

以上是数据帧的排序子数组的滚动平均值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>