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 nativorange
comodf['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
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')