En algún marco de datos en el que estoy trabajando actualmente, tengo una columna ('comportamiento') en la que cada entrada es una cadena que describe los pagos de matrícula faltantes de los estudiantes a lo largo del tiempo:

Cada dos espacios en la cadena corresponden a un período de tiempo. Por ejemplo, si tenemos la cadena

"01 V V"

Eso significa que el estudiante, durante los tres períodos de seguimiento de sus pagos, pagó los dos primeros a tiempo pero se saltó el último.

El pago más reciente corresponde a los dos primeros elementos de la cadena (incluidos los espacios), los dos espacios siguientes corresponden al segundo, y así sucesivamente

Aquí hay un ejemplo de las tres primeras entradas del marco de datos.

pd.DataFrame({'subject':['S1', 'S2', 'S3'], 
              'behavior': [' V V V010101--0101', ' V V----01', '070707 V V--']})

  subject            behavior
0      S1   V V V010101--0101
1      S2           V V----01
2      S3        070707 V V--

Lo que tengo que hacer es descomponer las cadenas en varias columnas, cada una correspondiente a un pago. Para este ejemplo, esto implicaría la creación de 9 columnas adicionales (pago 1, pago 2, etc.) ya que la cadena más larga de la columna de comportamiento contiene información sobre 9 pagos.

He estado tratando de resolver esto pero parece que no puedo encontrar la solución. ¿Me puedes ayudar?

0
Álvaro León González 31 ago. 2020 a las 23:43

1 respuesta

La mejor respuesta

Lo hice en 2 pasos, primero haciéndolo una lista (dividiéndolo por cada 2 caracteres)

Luego, puede dividir eso en columnas si eso es lo que desea.

def splitme(s, n):
    aslist = [s[i:i+n] for i in range(0, len(s), n)]
    return aslist
    
# new column is a list of every n=2 characters
df['as_list'] = df['behavior'].apply(lambda x: splitme(str(x), 2))

# now break into columns
pd.DataFrame(df["as_list"].to_list())
1
Josh 31 ago. 2020 a las 20:55