#python #pandas
Вопрос:
Я хочу удалить повторяющиеся записи в строке столбца и вернуть только уникальные значения. Я пытался set(df['unit])
, но это совсем не помогло. Я хочу иметь только (New Ward, Adult Ward)/(Pediatric Ward)
, например. Не могли бы вы сообщить мне, как исправить эту ошибку?
Комментарии:
1. Ваши записи выглядят как списки, поэтому вы должны получить доступ к каждому из этих списков, чтобы преобразовать их в наборы, чтобы получить уникальные записи.
2. Вы можете использовать метод pandas drop_duplicates ().
Ответ №1:
Похоже, ваши ячейки содержат строки, разделенные запятыми. В этом случае вы можете
- разделите записи на
',s*'
(запятая плюс необязательный пробел), - преобразуйте их в наборы,
- и соедините их строками, разделенными запятыми:
df['unit'] = df.unit.str.split(',s*').apply(set).str.join(', ')
Однако у такого способа кодирования значений есть и недостатки. (Например, 'Adult Ward, New WARD'
и 'New WARD, Adult Ward'
было бы двумя различными значениями, когда на самом деле они идентичны). Рассмотрите возможность обработки каждой палаты как отдельной колонки, например,
for w in ['Pediatric Ward', 'New Ward', 'Adult Ward']:
df[w] = df.unit.str.contains(w, case=False)
в результате для каждой палаты будут созданы отдельные столбцы, с которыми будет намного проще работать в дальнейшем, например, получать комбинации палат:
unit Pediatric Ward New Ward Adult Ward
0 Pediatric Ward True False False
1 Adult Ward, New WARD False True True
2 New WARD False True False
3 Pediatric Ward True False False
4 Adult Ward, New WARD False True True
Комментарии:
1. Блестяще! Спасибо, @fsimonjetz! Что касается
"WARD"
проблемы, я справляюсь с ней, добавляя шаг очистки.df['unit']=df['unit'].replace({"WARD", "Ward"}, regex=True)