me gustaría hacer una buena función para agregar datos entre una matriz (que es una matriz de registro numpy, pero no cambiar nada)manera Pythonic a las matrices de agregados (numpy o no)
tiene una matriz de los datos que desea agregar entre uno de los ejes: por ejemplo, una serie de dtype=[(name, (np.str_,8), (job, (np.str_,8), (income, np.uint32)]
y que desea tener el ingreso medio por puesto de trabajo
hice esta función, y en el ejemplo que debería ser llamado como aggregate(data,'job','income',mean)
def aggregate(data, key, value, func):
data_per_key = {}
for k,v in zip(data[key], data[value]):
if k not in data_per_key.keys():
data_per_key[k]=[]
data_per_key[k].append(v)
return [(k,func(data_per_key[k])) for k in data_per_key.keys()]
El problema es que no me parece muy agradable Me gustaría tenerlo en una línea: ¿tiene alguna idea?
Gracias por su respuesta Louis
PD: Me gustaría mantener el func en la llamada para que usted también puede pedir mediana, mínimo ...
No sé numpy, pero su 'dtype' parece tener un problema con los paréntesis .. – int3
Los paréntesis no coinciden. Esto genera confusión adicional. –
No entiendo tu comentario de que "te gustaría tenerlo en una línea". Cuando llamas a la función, esa será una línea. ¿Importa cuántas líneas tiene la función en sí? De todos modos, creo que tu mejor opción es usar 'defaultdict' como dicen las respuestas. – steveha