# -*- coding: utf-8 -*-
import numpy as np
def groupby(arr, num, *function):
tmp = arr[:,np.argsort(arr[num,:])]
ll = []
for i in range(len(arr)):
ll.append(np.split(tmp[i,:], np.unique(tmp[num,:], return_index=True)[1])[1:])
new = np.stack(ll, axis=1)
res = np.transpose(np.asanyarray([(arr[0][0], *(function[f](arr[f+1].astype(float)) for f in range(len(function)))) for arr in new]))
return res
- 函数接受三个参数,一个是需要分组的数组,一个是分组依据列的位置,还有一个是分组后聚合需要的操作(可以传入多个)
- 先对依据列进行排序,然后分组,分组后对操作解包,分别应用到各个需要聚合的列