Solución:
Puedes ver la diferencia en un ejemplo simple. Consideremos este marco de datos:
df = pd.DataFrame({'a': [1, 2],'b': [3, 4]})
print (df)
a b
0 1 3
1 2 4
Los índices son entonces 0 y 1
Si utiliza set_index
con la columna ‘a’, los índices son 1 y 2. Si lo hace df.set_index('a').loc[1,'b']
, obtendrás 3.
Ahora si quieres usar reindex
con los mismos índices 1 y 2 como df.reindex([1,2])
, obtendrá 4.0 cuando lo haga df.reindex([1,2]).loc[1,'b']
Lo que pasó es que set_index
ha reemplazado los índices anteriores (0,1) con (1,2) (valores de la columna ‘a’) sin tocar el orden de los valores en la columna ‘b’
df.set_index('a')
b
a
1 3
2 4
tiempo reindex
cambia los índices pero mantiene los valores en la columna ‘b’ asociados a los índices en el df original
df.reindex(df.a.values).drop('a',1) # equivalent to df.reindex(df.a.values).drop('a',1)
b
1 4.0
2 NaN
# drop('a',1) is just to not care about column a in my example
Finalmente, reindex
cambiar el orden de los índices sin cambiar los valores de la fila asociada a cada índice, mientras set_index
cambiará los índices con los valores de una columna, sin tocar el orden de los otros valores en el marco de datos
Solo para agregar, deshacer para set_index
sería reset_index
método (más o menos):
df = pd.DataFrame({'a': [1, 2],'b': [3, 4]})
print (df)
df.set_index('a', inplace=True)
print(df)
df.reset_index(inplace=True, drop=False)
print(df)
a b
0 1 3
1 2 4
b
a
1 3
2 4
a b
0 1 3
1 2 4
Además de una gran respuesta de Ben. T, me gustaría dar un ejemplo más de cómo son diferentes cuando usas reindex
y set_index
a una columna de índice
import pandas as pd
import numpy as np
testdf = pd.DataFrame({'a': [1, 3, 2],'b': [3, 5, 4],'c': [5, 7, 6]})
print(testdf)
print(testdf.set_index(np.random.permutation(testdf.index)))
print(testdf.reindex(np.random.permutation(testdf.index)))
Producción:
- Con
set_index
, cuandoindex
columna (la primera columna) se baraja, el orden de las otras columnas se mantiene intacto - Con
reindex
, el orden de las filas se cambia de acuerdo con la mezcla deindex
columna.
a b c
0 1 3 5
1 3 5 7
2 2 4 6
a b c
1 1 3 5
2 3 5 7
0 2 4 6
a b c
2 2 4 6
1 3 5 7
0 1 3 5