Разница между методами df.reindex () и df.set_index () в пандах - PullRequest
0 голосов
/ 07 июня 2018

Я был смущен этим, что очень просто, но я не сразу нашел ответ по StackOverflow:

  • df.set_index('xcol') делает столбец 'xcol' индексом (когда это столбец df).

  • df.reindex(myList), однако, берет индексы за пределами кадра данных, например, из списка с именем myList, который мы определили где-то еще.

Надеюсь, этот пост проясняет это!Дополнения к этому посту также приветствуются!

Ответы [ 3 ]

0 голосов
/ 15 мая 2019

Просто добавьте, отмена для set_index будет reset_index метод (более или менее):

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
0 голосов
/ 16 августа 2019

Помимо великолепного ответа от Бена.T, я хотел бы привести еще один пример того, как они различаются при использовании reindex и set_index для столбца индекса

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)))

Вывод:

  • Сset_index, когда index столбец (первый столбец) тасуется, порядок других столбцов остается неизменным
  • При reindex порядок строк изменяется соответственно на случай перемешивания indexстолбец.
   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
0 голосов
/ 07 июня 2018

Вы можете увидеть разницу на простом примере.Давайте рассмотрим этот фрейм данных:

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 изменит индексы со значениями столбца, не затрагивая порядок других значений в кадре данных

...