Python 利用内置的聚合功能

Python 利用内置的聚合功能,python,pandas,numpy,Python,Pandas,Numpy,是否有一些内置聚合到Pandas(或NumPy?)中,我可以用来优化下面标有***的行 >>> import numpy as np >>> import pandas as pd >>> >>> df = pd.DataFrame({'A':[1,21,4,5,3,3,5,653,2], 'B':[1,2,3,4,5,6,7,8,9]}) >>> steps = 3

是否有一些内置聚合到Pandas(或NumPy?)中,我可以用来优化下面标有
***
的行

    >>> import numpy as np
    >>> import pandas as pd
    >>>
    >>> df = pd.DataFrame({'A':[1,21,4,5,3,3,5,653,2], 'B':[1,2,3,4,5,6,7,8,9]})
    >>> steps = 3
    >>>
    >>> values = df.iloc[:,0]
    >>> current = values[-steps:]
    >>> old = values[:-steps]
*** >>> mean = np.array([old[i::steps].mean() for i in range(steps)]) ***
    >>> df.iloc[-steps:,0] = current - mean
    >>> df1 = df.iloc[-steps:]
    >>> df1
           A  B
    6    2.0  7
    7  641.0  8
    8   -1.5  9

我们可以以矢量化的方式计算
平均值
,因为for循环似乎是瓶颈,就像这样-

mean = old.values.reshape(-1,steps).mean(axis=0)
对于数组大小不能被
步数整除的情况,我们可以使用
np.bincount
-

ids = np.arange(a.size)%steps
mean= np.bincount(ids, a)/np.bincount(ids)

漂亮的解决方案,正是我想要的!当形状不容易按
步骤划分时
我在表单
ValueError:无法将大小为3025的数组重塑为形状(1008)
中得到一个错误。你知道有一种简单的方法可以在数组前面加上第一个值,直到对齐它为止吗?@JonasByström为此添加了一个解决方案。还有其他的方法,但张贴的方法似乎是处理这些案件的最短方法。