利用内置的Pandas进行聚合
问题描述:
是否有一些内建聚合到Pandas(或NumPy?)我可以使用下面的***
标记的优化线?利用内置的Pandas进行聚合
>>> 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
-
mean = old.values.reshape(-1,steps).mean(axis=0)
对于情况下,当数组的大小可能不整除通过steps
,我们可以使用np.bincount
-
ids = np.arange(a.size)%steps
mean= np.bincount(ids, a)/np.bincount(ids)
美丽的解决方案,正是我一直在寻找! –
当形状不容易被'steps'分割时,我得到一个错误'ValueError:can not reshape array of size 3025 into shape(1008)'。你知道一个简单的方法来将我的数组与第一个值相加,直到我得到它的“steps”对齐吗? –
@JonasByström为此添加了一个解决方案。还有其他的方法,但贴出来的似乎是处理这些案件的最短时间。 – Divakar