#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.