En los pandas de Python, inicie el índice de fila desde 1 en lugar de cero sin crear una columna adicional

Sé que puedo restablecer los índices como tal

df.reset_index(inplace=True) 

pero esto iniciará el índice desde 0 . Quiero empezar desde 1 . ¿Cómo hago eso sin crear columnas adicionales y manteniendo la funcionalidad y las opciones de index / reset_index? No quiero crear un nuevo dataframe, por lo que inplace=True todavía debería aplicarse.

Simplemente asigne directamente una nueva matriz de índice:

 df.index = np.arange(1, len(df) + 1) 

Ejemplo:

 In [151]: df = pd.DataFrame({'a':np.random.randn(5)}) df Out[151]: a 0 0.443638 1 0.037882 2 -0.210275 3 -0.344092 4 0.997045 In [152]: df.index = np.arange(1,len(df)+1) df Out[152]: a 1 0.443638 2 0.037882 3 -0.210275 4 -0.344092 5 0.997045 

O solo:

 df.index = df.index + 1 

Si el índice ya está basado en 0

Tiempos

Por alguna razón no puedo tomar tiempos en reset_index pero los siguientes son tiempos en un df de 100,000 filas:

 In [160]: %timeit df.index = df.index + 1 The slowest run took 6.45 times longer than the fastest. This could mean that an intermediate result is being cached 10000 loops, best of 3: 107 µs per loop In [161]: %timeit df.index = np.arange(1, len(df) + 1) 10000 loops, best of 3: 154 µs per loop 

Así que sin el tiempo para reset_index no puedo decirlo definitivamente, sin embargo, parece que simplemente agregar 1 a cada valor de índice será más rápido si el índice ya está basado en 0

También puede especificar el valor de inicio utilizando el rango de índice como se muestra a continuación. RangeIndex es compatible con pandas.

 #df.index 

se imprime el valor predeterminado, (inicio = 0, parada = elemento final, paso = 1)

Puede especificar cualquier rango de valor de inicio como este:

 df.index = pd.RangeIndex(start=1, stop=600, step=1) 

Consulte: pandas.RangeIndex