Исправьте перекрывающиеся категории в Пандах - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть набор данных, который содержит категорическую характеристику, изображающую диапазоны.Категории этой функции - это упорядоченные диапазоны значений.

Однако в этом конкретном наборе данных есть одна категория, которая охватывает несколько других категорий.Фрагмент кода ниже показывает пример такого случая.

Обратите внимание на категорию 11-30 spans 11-20 и 21-30.

data = ['1-10', '11-20','1-10','11-30','11-20','1-10','21-30','30+']

cat = pd.Categorical(data, categories=['1-10', '11-20','21-30','11-30', '30+'], ordered=True)

Мой подход заключается в том, чтобы сохранить большую категорию и сгруппировать две меньшие категории в эту.Один из способов сделать это - просто заменить все вхождения этих записей значением более широкой категории, как показано здесь:

s = pd.Series(cat)
s.replace(
    {'11-20': '11-30', 
     '21-30':'11-30'
})
print(s)

, который выводит:

0     1-10
1    11-30
2     1-10
3    11-30
4    11-30
5     1-10
6    11-30
7      30+
dtype: object

Однако, это кажетсякак очень грубое решение проблемы, которая должна была появиться несколько раз в истории.

Мой вопрос таков: Каков наилучший способ исправления перекрывающихся категорий с помощью панд?

1 Ответ

0 голосов
/ 27 февраля 2019

Это рекомендуемый способ выбора уникальных / уникальных значений из pandas.Series объекта.

.unique() метод для pandas.Series позволяет вам сделать это.

import pandas as pd

data = ['1-10', '11-20','1-10','11-30','11-20','1-10','21-30','30+']
cat = pd.Categorical(data, categories=['1-10', '11-20','21-30','11-30', '30+'], ordered=True)

s = pd.Series(cat)
s.replace(
    {'11-20': '11-30', 
     '21-30':'11-30'
})

# Now .unique() method removes duplicated categories from series
unique_cats = s.unique() # unique categories
unique_series = pd.Series(unique_cats)  # This converts to pandas series

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...