Как создать индивидуальные корзины в Python - PullRequest
0 голосов
/ 01 ноября 2019

Я хотел бы создать ячейки для CUSTOMER_AGE в моем фрейме данных, используя функцию вырезки панд. Я попытался использовать код ниже:

bins = [0,20,25, 30, 35, 40,45,50,55, 60,150]
labels = ['0-20yrs', '21-25 yrs', '26-30 yrs', '31-35 yrs','36-40 yrs', 
           '41-45 yrs', '46-50 yrs','51-55 yrs', '56-59 yrs', '> 60yrs']
df['BINS'] = pd.cut(df.CUSTOMER_AGE, bins, labels = labels,include_lowest = True)

Вот вывод, который я получил:

CUSTOMER_AGE               BIN
 20                      0-20 yrs
 38                      36-40 yrs
 58                      56-59 yrs
 60                      56-59 yrs
 60                      56-59 yrs
 72                      > 60 yrs
 61                      > 60 yrs
 60                      56-59 yrs
 80                      > 60 yrs 

Я хотел бы знать, почему только клиенты, которым 60 лет, попадают под '56-59 лет "бен вместо"> 60 лет ". Но клиенты старше 60 лет попадают в правильную корзину, которая составляет «> 60 лет»

1 Ответ

0 голосов
/ 01 ноября 2019

Я думаю, вам нужно right=False в cut для изменения closed='right' в closed='left':

вправо : bool, по умолчанию True

Указывает, содержит ли ячейки крайний правый край или нет. Если right == True (по умолчанию), то для бинов [1, 2, 3, 4] указывается (1,2], (2,3], (3,4]. Этот аргумент игнорируется, если для бинов задан IntervalIndex.

df['BINS'] = pd.cut(df.CUSTOMER_AGE, bins, labels = labels,include_lowest = True, right=False)
print (df)
   CUSTOMER_AGE        BIN       BINS
0            20   0-20 yrs  21-25 yrs
1            38  36-40 yrs  36-40 yrs
2            58  56-59 yrs  56-59 yrs
3            60  56-59 yrs    > 60yrs
4            60  56-59 yrs    > 60yrs
5            72   > 60 yrs    > 60yrs
6            61   > 60 yrs    > 60yrs
7            60  56-59 yrs    > 60yrs
8            80   > 60 yrs    > 60yrs

Для лучшего понимания возможна проверка Интервал :

Закрытый интервал (в математике, обозначаемый квадратными скобками) содержит свои конечные точкит. е. закрытый интервал [0, 5] характеризуется условиями 0 <= x <= 5. Это то, что обозначает закрытый = 'both'. Открытый интервал (в математике, обозначаемый скобками) не содержит своих конечных точек,т. е. открытый интервал (0, 5) характеризуется условиями 0 <x <5. Это то, что означает закрытый = «ни один». Интервалы также могут быть <strong>полуоткрытыми или полуоткрытымизакрыто , то есть [0, 5) описывается как 0 <= x <5 </strong> (закрыто = 'слева') и (0, 5] описывается 0 (закрыто = 'вправо').

, а также проверяется без параметра label:

df['BINS_l'] = pd.cut(df.CUSTOMER_AGE, bins, include_lowest = True, right=True)
df['BINS_r'] = pd.cut(df.CUSTOMER_AGE, bins, include_lowest = True, right=False)
print (df)
   CUSTOMER_AGE        BIN          BINS_l     BINS_r
0            20   0-20 yrs  (-0.001, 20.0]   [20, 25)
1            38  36-40 yrs    (35.0, 40.0]   [35, 40)
2            58  56-59 yrs    (55.0, 60.0]   [55, 60)
3            60  56-59 yrs    (55.0, 60.0]  [60, 150)
4            60  56-59 yrs    (55.0, 60.0]  [60, 150)
5            72   > 60 yrs   (60.0, 150.0]  [60, 150)
6            61   > 60 yrs   (60.0, 150.0]  [60, 150)
7            60  56-59 yrs    (55.0, 60.0]  [60, 150)
8            80   > 60 yrs   (60.0, 150.0]  [60, 150)

Так что, если вы видите (60.0, 150.0] яt означает 60.0 < x <= 150.0 (60 значения исключены).

Но во втором столбце [60, 150) это означает 60 <= x < 150 (60 значения включены).

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