Как получить уникальное значение серии pandas с сохранением того же порядка появления

#python #pandas #numpy

#python #pandas #numpy

Вопрос:

У меня есть такой фрейм данных —

     TEST_NUM  SITE_NUM  RESULT TEST_FLG              TEST_TXT UNITS LO_LIMIT HI_LIMIT
0       150         0 -0.4373        P  Continuity_PPMU XSCI     V       -1     -0.3
1       150         1 -0.4383        P  Continuity_PPMU XSCI     V       -1     -0.3
2       150         2 -0.4357        P  Continuity_PPMU XSCI     V       -1     -0.3
3       150         3 -0.4370        P  Continuity_PPMU XSCI     V       -1     -0.3
4       151         0 -0.4646        P  Continuity_PPMU XSCO     V       -1     -0.3
  

Как вы можете видеть, в TEST_TXT есть повторяющиеся значения. В TEST_TXT около 53 уникальных значений.

Q> Я хочу получить все уникальные значения TEST_TXT последовательно, сохраняя тот же порядок, что-то вроде ['Continuity_PPMU XSCI','Continuity_PPMU XSCO',..etc] .

В настоящее время, когда я использую np.unique() его, меняется порядок, хотя он дает уникальное значение.

Я могу выполнить итерацию фрейма данных, сохранить карту, чтобы проверить, появилось ли это значение уже или нет, если нет, я могу добавить в список. Таким образом, я могу иметь уникальные значения также в том же порядке, но я искал более элегантный способ, более python (или pandas / numpy).

Спасибо!

Ответ №1:

Простое переключение с numpy.unique() на pandas.Series.unique() сделает свое дело. NumPy получает уникальные значения с помощью сортировки, в то время как Pandas использует хэш-таблицу и конкретно указывает в документации, что результаты находятся в том порядке, в котором они изначально появились.

Итак, вот так:

 df.TEST_TXT.unique()
  

Ответ №2:

Вы можете использовать drop_duplicates непосредственно для своей серии:

 df['TEST_TXT'].drop_duplicates()
  

Даст вам то, что вы хотите, сохраняя порядок

Комментарии:

1. Большое спасибо. Похоже, это тоже решило проблему. Принятие ответа Джона просто из-за времени. Также благодарен вам. 1.