Tengo tres listas (realmente columnas en un marco de datos de pandas) una con datos de interés, una con coordenadas de matriz x y otra con coordenadas de matriz y. Todas las listas tienen la misma longitud y su orden en la lista asociada a las coordenadas (por lo que L1: "Apple" coincide con L2: "1" y L3: "A"). Me gustaría hacer una matriz con las dimensiones proporcionadas por las dos listas de coordenadas con datos de la lista de datos. ¿Cuál es la mejor manera de hacer esto?
El resultado esperado tendría la forma de una matriz numpy o algo así:
array = [[0,0,0,3,0,0,2,3][0,0,0,0,0,0,0,3]] #databased on below Donde en este ejemplo la matriz tiene las dimensiones de y = 2 de y.unique() y x = 8 de x.unique() .
Los siguientes son datos de entrada de ejemplo para lo que estoy hablando:
| matriz_x | array_y | Datos |
|---|---|---|
| 1 | un | 0 |
| 2 | un | 0 |
| 3 | un | 0 |
| 4 | un | 3 |
| 5 | un | 0 |
| 6 | un | 0 |
| 7 | un | 2 |
| 8 | un | 3 |
| 1 | b | 0 |
| 2 | b | 0 |
| 3 | b | 0 |
| 4 | b | 0 |
| 5 | b | 0 |
| 6 | b | 0 |
| 7 | b | 0 |
| 8 | b | 3 |
Quizá estés buscando pivot :
out = df.pivot(values=['Data'], columns=['array_y'], index=['array_x']).to_numpy()Producción:
array([[0, 0], [0, 0], [0, 0], [3, 0], [0, 0], [0, 0], [2, 0], [3, 3]], dtype=int64)Supongamos que tiene un marco de datos como ese:
import pandas as pd import numpy as np myDataframe = pd.DataFrame([[1,2],[3,4],[5,6]], columns=['x','y'])Luego puede seleccionar las columnas que desea y crear una matriz a partir de ellas.
my_array = np.array(myDataframe[['x','y']]) >>> my_array array([[1, 2], [3, 4], [5, 6]], dtype=int64)Podría hacer un zip (nota: estoy abreviando algunos de sus datos de ejemplo):
data_x = [1, 2, 3, 4, 5, 6, 7, 8] * 2 data_y = ['a'] * 8 + ['b'] * 8 data_vals = [0,0,0,3,0,0,2,3,0,0,0,0,0,0,0,3] coll = dict() for (x, y, val) in zip(data_x, data_y, data_vals): if coll.get(y) is None: coll[y] = [] if x > len(coll[y]): coll[y].extend([0] * (x - len(coll[y]))) coll[y][x - 1] = val result = [] for k in sorted(coll): result.append(coll[k]) print coll print resultProducción:
{'a': [0, 0, 0, 3, 0, 0, 2, 3], 'b': [0, 0, 0, 0, 0, 0, 0, 3]} [[0, 0, 0, 3, 0, 0, 2, 3], [0, 0, 0, 0, 0, 0, 0, 3]]