pandas似乎没有直接的方法对数据进行n个一组的聚合,这里讨论实现的方法。
思路是添加一列 group label 'g_i',连续n个一组,然后根据 group label 聚合即可。
def group_by_n(df,n):
n_g = int(np.floor(len(df)/n))
g_i = []
for i in range(n_g):
g_i += [i]*n
for i in range(len(df)-n*n_g):
g_i += [n_g]
df['g_i'] = g_i
group_by_n(df)
df.groupby('g_i')
核心在于获取组的数量n_g,类似的可以进行间隔分组,将数据相继编号为1,2,3...n,并重复循环,对编号相同的数据聚合(类似于排队报数,报到相同数的分为一组)
def select_by_n(df,n):
n_g = int(np.floor(len(df)/n))
s_i = list(range(n))*n_g
for i in range(len(df)-n*n_g):
s_i += [i]
df['s_i'] = s_i
select_by_n(df)
df.groupby('s_i')