Как выбрать конкретную категорию бинов в Python? - PullRequest
2 голосов
/ 16 июня 2019

У меня есть список чисел, которые я разделил на корзины с помощью pandas.cut ().Как я могу выбрать одну категорию бинов?

manhattanBedrmsPrice.head()

0      859
5     1055
9      615
11     663
13    1317
Name: Price Value, dtype: int64


bins = [400,600,800,1000,1200, 1400,1600,1800,2000,2200,2400,2600,2800,3000]

manPriceCategories = pd.cut(manhattanBedrmsPrice, bins)

Я получаю следующие категории:

Categories (13, interval[int64]): [(400, 600] < (600, 800] < (800, 1000] < (1000, 1200] ... (2200, 2400] < (2400, 2600] < (2600, 2800] < (2800, 3000]]

Как выбрать конкретную категорию?

Ответы [ 2 ]

0 голосов
/ 16 июня 2019

Вы можете присвоить категории переменной (например, cats), а затем использовать логическое индексирование, чтобы проверить, равны ли значения в вашей серии интересующей категории.

cats = manPriceCategories.cat.categories
>>> manPriceCategories.loc[manPriceCategories.eq(cats[1])]
9     (600, 800]
11    (600, 800]
Name: Price Value, dtype: category
Categories (13, interval[int64]): [(400, 600] < (600, 800] < (800, 1000] < (1000, 1200] ... (2200, 2400] < (2400, 2600] < (2600, 2800] < (2800, 3000]]
cats = manPriceCategories.cat.categories
cats = manPriceCategories.cat.categories

Вы можете использовать словарь, чтобы перечислить ваши категории, чтобы вы знали их индексные местоположения (например, 1 для (600, 800] выше).

>>> {n: cat for n, cat in enumerate(cats)}
{0: Interval(400, 600, closed='right'),
 1: Interval(600, 800, closed='right'),
 2: Interval(800, 1000, closed='right'),
 3: Interval(1000, 1200, closed='right'),
 4: Interval(1200, 1400, closed='right'),
 5: Interval(1400, 1600, closed='right'),
 6: Interval(1600, 1800, closed='right'),
 7: Interval(1800, 2000, closed='right'),
 8: Interval(2000, 2200, closed='right'),
 9: Interval(2200, 2400, closed='right'),
 10: Interval(2400, 2600, closed='right'),
 11: Interval(2600, 2800, closed='right'),
 12: Interval(2800, 3000, closed='right')}
0 голосов
/ 16 июня 2019

В вашем случае

manPriceCategories.loc[manPriceCategories.isin([pd.Interval(600,800)])]

или используя коды данных категории

manPriceCategories[manPriceCategories.cat.codes==1]
1    (600, 800]
2    (600, 800]
Name: 1, dtype: category
...