¿Cómo puedo hacer este proceso de división en Python?
Estoy intentando hacer una etiquetación de datos en una tabla, y necesito hacerlo de tal manera que, en cada fila, el índice se repita, sin embargo, en cada columna haya otra clase de Enumeración.
Lo que he hecho hasta ahora es hacer esta representación con la misma clase enumeradora.
También sería posible utilizar la columna por separado como una lista. Pero ¿cuál sería la mejor manera de resolver esto?
“`
import pandas as pd
from enum import Enum
df = pd.DataFrame({‘first’: [‘producto y otro’, ‘producto2 y otro’, ‘precio’], ‘second’:[‘producto y precios’, ‘precio2’, ‘producto3 y precio’]})
df
class Tipos(Enum):
B = 1
I = 2
L = 3
for index, row in df.iterrows():
sentencas = row.values
for sentenca in sentencas:
for pos, palavra in enumerate(sentenca.split()):
print(f”{palavra} {Tipos(pos+1).name}”)
Results:
first second
0 producto y otro producto y precios
1 producto2 y otro precio2
2 precio producto3 y precio
producto B
y I
otro L
producto B
y I
precios L
producto2 B
y I
otro L
precio2 B
precio B
producto3 B
y I
precio L
Desired Results:
Word Ent
0 producto Bfirst
1 y Ifirst
2 otro Lfirst
3 producto Bsecond
4 y Isecond
5 precios Lsecond
6 producto2 Bfirst
7 y Ifirst
8 otro Lfirst
9 precio2 Bsecond
10 precio Bfirst
11 producto3 Bsecond
12 y Isecond
13 precio Lsecond
En ese caso, la secuencia es así: (Bfirst, Ifirst, Lfirst, Lfirst…) y si cambia la columna sería Bsecond, Isecond, L_second…
davy.ai
Para lograr los resultados deseados con cada columna teniendo una clase Enum diferente, podemos modificar el código inicial de la siguiente manera:
La salida será:
En este código, definimos las diferentes clases Enum para cada columna (por ejemplo,
B_first
,I_first
para la primera columna, yB_second
,I_second
para la segunda columna). Luego, usamos el índice de columna para calcular el valor Enum para cada palabra en la oración. Por ejemplo,pos+1 + 3*col_idx
nos dará el valorpos+1
para la primera columna y el valorpos+4
para la segunda columna.Finalmente, creamos la variable
ent
(entidad) obteniendo el nombre Enum asociado con este valor (por ejemplo,Tipos(pos+1 + 3*col_idx).name
). Ahora podemos imprimir el resultado que coincide con la salida deseada.