Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

175
Vistas
Los pandas se dividen y agregan

Soy nuevo en trabajar con pandas, no sé cómo resolver el siguiente problema.

Tengo el siguiente marco de datos:

 0 1 2 3 4 5 0 a 1 d 4 g 7 1 b 2 e 5 h 8 2 c 3 f 6 i 9

y tengo que convertirme en lo siguiente:

 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Prueba esto:

 data = { 0: pd.concat(df[c] for c in df.columns[0::2]).reset_index(drop=True), 1: pd.concat(df[c] for c in df.columns[1::2]).reset_index(drop=True), } df = pd.DataFrame(data)

Producción:

 >>> df 0 1 0 a 1 1 b 2 2 c 3 3 d 4 4 e 5 5 f 6 6 g 7 7 h 8 8 i 9

Explicación

Primero, seleccionamos todas las columnas pares y las agrupamos:

 >>> df 0 1 2 3 4 5 0 a 1 d 4 g 7 1 b 2 e 5 h 8 2 c 3 f 6 i 9 >>> df.columns Index(['0', '1', '2', '3', '4', '5'], dtype='object') >>> even_col_names = df.columns[0::2] # slice syntax: start:stop:step (start with the 0th item, end with the <unspecified> (last) item, select every 2 items) Index(['0', '2', '4'], dtype='object') >>> even_cols = df[even_col_names] >>> even_cols 0 2 4 0 adg 1 beh 2 cfi

Luego, seleccionamos cada columna impar y las agrupamos:

 >>> odd_col_names = df.columns[1::2] # start with the 1st item, select every 2 items >>> odd_col_names Index(['1', '3', '5'], dtype='object') >>> odd_cols = df[odd_col_names] >>> odd_cols 1 3 5 0 1 4 7 1 2 5 8 2 3 6 9

Luego, concatenamos las columnas pares en una sola columna:

 >>> even_cols_list = [df[c] for c in even_col_names] >>> even_cols_list [0 a 1 b 2 c Name: 0, dtype: object, 0 d 1 e 2 f Name: 2, dtype: object, 0 g 1 h 2 i Name: 4, dtype: object] >>> even_col = pd.concat(even_cols_list).reset_index(drop=True) >>> even_col 0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i dtype: object

Luego concatenamos las columnas impares en una sola columna:

 >>> odd_cols_list = [df[c] for c in odd_col_names] >>> odd_cols_list [0 1 1 2 2 3 Name: 1, dtype: int64, 0 4 1 5 2 6 Name: 3, dtype: int64, 0 7 1 8 2 9 Name: 5, dtype: int64] >>> odd_col = pd.concat(odd_cols_list).reset_index(drop=True) >>> odd_col 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 dtype: int64

Finalmente, creamos un nuevo marco de datos con estas dos columnas:

 >>> df = pd.DataFrame({0: even_col, 1: odd_col}) >>> df 0 1 0 a 1 1 b 2 2 c 3 3 d 4 4 e 5 5 f 6 6 g 7 7 h 8 8 i 9
over 4 years ago · Santiago Trujillo Denunciar

0

Convierta datos a numpy, cambie la forma dentro de numpy (dos columnas) y cree un nuevo marco de datos de pandas (convierta la columna relevante en un número entero):

 df = df.to_numpy() df = np.reshape(df, (-1, 2)) # have a look at the docs for np.reshape df = pd.DataFrame(df).transform(pd.to_numeric, errors='ignore') df.sort_values(1, ignore_index = True) 0 1 0 a 1 1 b 2 2 c 3 3 d 4 4 e 5 5 f 6 6 g 7 7 h 8 8 i 9

Otra opción sería apilar individualmente los números y las cadenas, antes de volver a combinarlos en un solo marco de datos:

 numbers = df.select_dtypes('number').stack().array strings = df.select_dtypes('object').stack().array out = pd.concat([pd.Series(strings), pd.Series(numbers)], axis = 1) out.sort_values(1, ignore_index = True) 0 1 0 a 1 1 b 2 2 c 3 3 d 4 4 e 5 5 f 6 6 g 7 7 h 8 8 i 9

Una opción más, que aprovecha los patrones aquí, es pivot_longer de pyjanitor :

 # pip install pyjanitor import pandas as pd import janitor df.pivot_longer(index=None, names_to=['0','1'], names_pattern= ['0|2|4', '1|3|5']) 0 1 0 a 1 1 b 2 2 c 3 3 d 4 4 e 5 5 f 6 6 g 7 7 h 8 8 i 9
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda