es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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 I
first
2 otro Lfirst
3 producto B
second
4 y Isecond
5 precios Lsecond
6 producto2 Bfirst
7 y I
first
8 otro Lfirst
9 precio2 B
second
10 precio Bfirst
11 producto3 B
second
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…

Tags:  , ,

Answer

  1. Avatar for 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:

    import pandas as pd
    from enum import Enum
    
    
    df = pd.DataFrame({'first': ['product and other', 'product2 and other', 'price'], 'second':['product and prices', 'price2', 'product3 and price']})
    df
    
    class Tipos(Enum):
        B_first = 1
        I_first = 2
        L_first = 3
        B_second = 4
        I_second = 5
        L_second = 6
    
    for index, row in df.iterrows():
        sentencas = row.values
        for col_idx, sentenca in enumerate(sentencas):
            for pos, palavra in enumerate(sentenca.split()):
                ent = f'{Tipos(pos+1 + 3*col_idx).name}'
                print(f"{palavra} {ent}")
    

    La salida será:

    product B_first
    and I_first
    other L_first
    product B_second
    and I_second
    prices L_second
    product2 B_first
    and I_first
    other L_first
    price2 B_second
    price B_first
    product3 B_second
    and I_second
    price L_second
    

    En este código, definimos las diferentes clases Enum para cada columna (por ejemplo, B_first, I_first para la primera columna, y B_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 valor pos+1 para la primera columna y el valor pos+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.

Comments are closed.