Cómo agregar una columna con valores 1 a len (df) a un marco de datos

2 minutos de lectura

Avatar de usuario de Navneet
Navneet

El índice que tengo en el marco de datos (con 30 filas) es de la forma:

Int64Index([171, 174, 173, 172, 199, …, 175, 200])

El índice no aumenta estrictamente porque el marco de datos es el resultado de una ordenación().

Quiero agregar una columna que es la serie:

[1, 2, 3, 4, 5, …, 30]

¿Cómo debo hacer eso?

Qué tal si:

df['new_col'] = range(1, len(df) + 1)

Alternativamente, si desea que el índice sean los rangos y almacene el índice original como una columna:

df = df.reset_index()

  • Esta respuesta me llevó a la mitad de donde quería, ya que ya tenía un índice que quería reemplazar. En tal caso se puede complementar con: df = df.reset_index(drop=True)

    – molinillo de java

    3 de noviembre de 2016 a las 14:14

  • Usando np.arange en lugar de nativo rangecomo df['new_col'] = np.arange(1, df.shape[0] + 1) debería acelerar el tiempo de ejecución, especialmente cuando se trata de grandes conjuntos de datos.

    – poder panzer

    12 de octubre de 2020 a las 4:24

Me tropecé con esta pregunta mientras intentaba hacer lo mismo (creo). Así es como lo hice:

df['index_col'] = df.index

Luego puede ordenar en la nueva columna de índice, si lo desea.

  • No, eso estaría desordenado.

    – pacholik

    20 de julio de 2015 a las 13:59

  • más dinámico df[df.index.name] = df.index

    – ciudadnorman

    28 de septiembre de 2021 a las 2:36

avatar de usuario de nitin
nitina

Qué tal esto:

from pandas import *

idx = Int64Index([171, 174, 173])
df = DataFrame(index = idx, data =([1,2,3]))
print df

Me da:

     0
171  1
174  2
173  3

¿Es esto lo que estás buscando?

  • Casi. Entonces, en resumen, necesito crear otro marco de datos que contenga el rango/posición de la fila. Y luego, necesito unirme a estos.

    – Navneet

    28 de agosto de 2012 a las 23:23

  • Sí, combina y agrega este df a su marco de datos existente usando df.combine_first (df2)

    – nitina

    29 ago 2012 a las 0:00

La forma de hacerlo sería esta:

Restableciendo el índice:

df.reset_index(drop=True, inplace=True)

Ordenar un índice:

df.sort_index(inplace=True)

Establecer un nuevo índice de una columna:

df.set_index('column_name', inplace=True)

Establecer un nuevo índice de un rango:

df.index = range(1, 31, 1) #a range starting at one ending at 30 with a stepsize of 1.

Ordenar un marco de datos basado en el valor de la columna:

df.sort_values(by='column_name', inplace=True)

La reasignación de variables también funciona:

df=df.reset_index(drop=True)
df=df.sort_index()
df=df.set_index('column_name')
df.index = range(1, 31, 1) #a range starting at one ending at 30 with a stepsize of 1.
df=df.sort_values(by='column_name')

¿Ha sido útil esta solución?