Вы можете увидеть разницу на простом примере.Давайте рассмотрим этот фрейм данных:
df = pd.DataFrame({'a': [1, 2],'b': [3, 4]})
print (df)
a b
0 1 3
1 2 4
Индексы равны 0 и 1
Если вы используете set_index
со столбцом 'a', то индексы равны 1 и 2. Если вы делаете df.set_index('a').loc[1,'b']
, вы получите 3.
Теперь, если вы хотите использовать reindex
с такими же индексами 1 и 2, как df.reindex([1,2])
, вы получите 4.0, когда вы выполните df.reindex([1,2]).loc[1,'b']
Что произошло, так это то, что set_index
заменил предыдущие индексы (0,1) на (1,2) (значения из столбца «a»), не затрагивая порядок значений в столбце «b»
df.set_index('a')
b
a
1 3
2 4
, в то время как reindex
изменяет индексы, но сохраняет значения в столбце 'b', связанные с индексами в исходном df
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
Наконец, reindex
изменяет порядок индексов без изменениязначения строки, связанной с каждым индексом, тогда как set_index
изменит индексы со значениями столбца, не затрагивая порядок других значений в кадре данных