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

332
Vistas
¿Cómo reordenar filas en el marco de datos de pandas por nivel de factor en python?

Creé un pequeño conjunto de datos que compara los precios de las bebidas de café por tamaño de taza.

Cuando giro mi conjunto de datos, la salida reordena automáticamente el índice (la columna 'Tamaño') alfabéticamente.

¿Hay alguna manera de asignar un nivel numérico a los diferentes tamaños (por ejemplo, pequeño = 0, mediano = 1, grande = 2) y reordenar las filas de esta manera?

Sé que esto se puede hacer en R usando la biblioteca forcats (usando fct_relevel por ejemplo), pero no sé cómo hacerlo en python. Preferiría mantener la solución para usar numpy y pandas.

 data = {'Item': np.repeat(['Latte', 'Americano', 'Cappuccino'], 3), 'Size': ['Small', 'Medium', 'Large']*3, 'Price': [2.25, 2.60, 2.85, 1.95, 2.25, 2.45, 2.65, 2.95, 3.25] } df = pd.DataFrame(data, columns = ['Item', 'Size', 'Price']) df = pd.pivot_table(df, index = ['Size'], columns = 'Item') df # Price # Item Americano Cappuccino Latte # Size # Large 2.45 3.25 2.85 # Medium 2.25 2.95 2.60 # Small 1.95 2.65 2.25
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puede usar un tipo Categorical con ordered=True :

 df.index = pd.Categorical(df.index, categories=['Small', 'Medium', 'Large'], ordered=True) df = df.sort_index()

producción:

 Price Item Americano Cappuccino Latte Small 1.95 2.65 2.25 Medium 2.25 2.95 2.60 Large 2.45 3.25 2.85

Puedes acceder a los códigos con:

 >>> df.index.codes array([0, 1, 2], dtype=int8)

Si esto fuera una Serie:

 >>> series.cat.codes
over 4 years ago · Santiago Trujillo Denunciar

0

Una opción es crear el categórico, antes de pivotar; para este caso, estoy usando encode_categorical de pyjanitor , principalmente por conveniencia:

 # pip install pyjanitor import pandas as pd import janitor (df .encode_categorical(Size = (None, 'appearance')) .pivot_table(index='Size', columns='Item') ) Price Item Americano Cappuccino Latte Size Small 1.95 2.65 2.25 Medium 2.25 2.95 2.60 Large 2.45 3.25 2.85

De esta manera, no tiene que preocuparse por clasificar, ya que pivotar implícitamente hace eso. Puede omitir el pyjanitor y limitarse a Pandas solamente:

 (df .astype({'Size': pd.CategoricalDtype(categories = ['Small', 'Medium', 'Large'], ordered = True)}) .pivot_table(index='Size', columns='Item') ) Price Item Americano Cappuccino Latte Size Small 1.95 2.65 2.25 Medium 2.25 2.95 2.60 Large 2.45 3.25 2.85
over 4 years ago · Santiago Trujillo Denunciar

0

1er CAMINO:

La función pivot_table ordena las filas según el índice. Por lo tanto, es mejor usar la función lambda cuando se aplica el índice en la función pivot_table. De esta manera, no necesita más pasos de clasificación (más tiempo) ni ninguna biblioteca de terceros.

 df = pd.pivot_table(df, index = (lambda row: 0 if df.loc[row,'Size']=="Small" else 1 if df.loc[row,'Size']=="Medium" else 2), columns = 'Item') Price Item Americano Cappuccino Latte 0 1.95 2.65 2.25 1 2.25 2.95 2.60 2 2.45 3.25 2.85

2do CAMINO:

También puede usar su propio código y luego cambiar el nombre y ordenar la tabla recién creada:

 df = pd.DataFrame(data, columns = ['Item', 'Size', 'Price']) df = pd.pivot_table(df, index = ['Size'], columns = 'Item') # rename: df = df.rename(index= lambda x: 0 if x=="Small" else 1 if x=="Medium" else 2) #sort: df = df.sort_index(ascending = True) Price Item Americano Cappuccino Latte 0 1.95 2.65 2.25 1 2.25 2.95 2.60 2 2.45 3.25 2.85
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