pandas
имеет pd.qcut
метод, который, при нанесении на Series
, возвращает categorical series (а DataFrame
ведет себя аналогично). Таким образом, чтобы получить обратно категорический индекс, вы можете сделать:
>>> import pandas as pd
# mock data
>>> df = pd.DataFrame({'sales_total': [1,2,162,126,126,12,7,1236,16,132,61,51]})
>>> cat_srs = pd.qcut(df['sales_total'], 10)
>>> print(cat_srs)
<<< 0 [1, 2.5]
1 [1, 2.5]
2 (159, 1236]
3 (1, 126]
4 (1, 126]
5 (8, 13.2]
6 (2.5, 8]
7 (159, 1236]
8 (13.2, 3]
9 (130.8, 159]
10 (56, 1]
11 (3, 56]
Name: dat, dtype: category
Categories (10, object): [...]
Вы можете получить записи серии с оператором values
, а затем оттуда получить их бин код с помощью codes
оператора:
>>> deciles = cat_srs.values.codes
>>> print(deciles)
<<< array([0, 0, 9, 6, 6, 2, 1, 9, 3, 8, 5, 4], dtype=int8)
Это то, что вам нужно. Отсюда вы можете назначить децили данные с помощью df['decile'] = deciles
, записи в группе с использованием df.groupby('decile')
и т. Д.
Один лайнер для всего вышеперечисленного pd.qcut(df['sales_total'], 10).values.codes
.
Edit: отвечая на вопрос модифицированную ниже, в комментариях — я не знаю способ сделать это, который пекли в библиотеку. Но, полагая, что ваши данные относительно непрерывны, вы можете самостоятельно создавать классы:
Можете ли вы предоставить образец ввода и нужные наборы данных? – MaxU
Да - вот несколько [тестовых данных] (https://www.dropbox.com/s/0ga6kgptxpzjs1i/Test-Data.csv?dl=0). Он имеет три серии - идентификатор учетной записи, почтовый индекс и продажи. Серия продаж является той, которая будет использоваться для классификации учетных записей –
и каков будет ваш желаемый набор данных? – MaxU