快速操作 list/dataframe 中的元素块

quick operation on blocks of elements in a list/dataframe

我有一个dataframe,我需要对特定列的元素进行六乘六的平均,然后将得到的列添加到dataframe中。


here's an example of the desired output


我正在使用 while 循环:它可以工作,但需要很长时间(列表大约有 44k 行)。

while k<df0.shape[0]:
tradRRP[k]=np.mean(df0[['RRP']][k:k+6])
tradRRP[k+1]=np.mean(df0[['RRP']][k:k+6])
tradRRP[k+2]=np.mean(df0[['RRP']][k:k+6])
tradRRP[k+3]=np.mean(df0[['RRP']][k:k+6])
tradRRP[k+4]=np.mean(df0[['RRP']][k:k+6])
tradRRP[k+5]=np.mean(df0[['RRP']][k:k+6])
k=k+6
print(np.format_float_positional(k/df0.shape[0]*100, precision=2), end =" ")
print(' % completed')

有没有更快的方法?

谢谢!

我制作了一个随机数据框df0 = pd.DataFrame(np.random.randint(0,10,(44000,1)), columns={'RRP'})

通过使用 pandas 系列,我设法减少了很多时间。更具体地说,如果你 运行 :

step = 6
meanlist = [df0[i:i+step].mean() for i in range(0,len(df0),step) for j in range(step)]

你最终得到一个 44k 的列表,其中包含 Series 对象,这些对象具有列的名称、数据框每一行的类型和值。然后您可以访问此列表以获取所需的值并将它们添加为原始数据框中的列。

在我的系统上比较了两种方法:

原解: 54.35062098503113 秒

Pandas系列解决方案: 12.6267409324646 秒

希望对您有所帮助,祝您有愉快的一天。