Понимание шкалы «Категория» в pandas - PullRequest
1 голос
/ 03 мая 2020
s = pd.Series(['Low', 'Low', 'High', 'Medium', 'Low', 'High', 'Low'])

s.astype('category', categories=['Low', 'Medium', 'High'], ordered=True)
print(s>'Low')

Вывод:

0    False
1    False
2    False
3     True
4    False
5    False
6    False
dtype: bool

Сомнение: как я уже говорил в категории, что LowLow 'должен возвращать True как для Medium, так и для High. Но он возвращает True только для Medium, почему? что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 03 мая 2020

В моей версии pandas параметр categories недопустим для .astype(). Чтобы сделать то, что вы хотите, вам нужен экземпляр CategoricalDtype:

from pandas.api.types import CategoricalDtype

s = pd.Series(['Low', 'Low', 'High', 'Medium', 'Low', 'High', 'Low'])
cat_type = CategoricalDtype(categories=['Low', 'Medium', 'High'], ordered=True)
s = s.astype(cat_type)
print(s>'Low')
0    False
1    False
2     True
3     True
4    False
5     True
6    False
dtype: bool

Подробнее об этом можно узнать в документах .

. это, т.е. без явного импорта, использует pd.Categorical():

raw_cat = pd.Categorical(
    ['Low', 'Low', 'High', 'Medium', 'Low', 'High', 'Low'],
    categories=['Low', 'Medium', 'High'],
    ordered=True
)

s = pd.Series(raw_cat)
0 голосов
/ 03 мая 2020

Это происходит потому, что сумма значения ASCII 'low' меньше, чем другие, но значение ha sh не равно.

Согласно Ascii sum-

["Low","Medium","high"]

  306    609     384

ha sh values-

low
L= sum(1 0 0 1 1 0 0) =3
o= sum(1 1 0 1 1 1 1) =6
w= sum(1 1 1 0 1 1 1) =6
                  sum =21
High
H=sum(1 0 0 1 0 0 0) =2
i=sum(1 1 0 1 0 0 1) =4
g=sum(1 1 0 0 1 1 1) =5
h=sum(1 1 0 1 0 0 0) =3
                 sum =14
Medium
M=sum(1 0 0 1 1 0 1) =4
i=sum(1 1 0 0 1 0 1) =4
d=sum(1 1 0 0 1 0 0) =3
i=sum(1 1 0 1 0 0 1) =4
u=sum(1 1 1 0 1 0 1) =5
m=sum(1 1 0 1 1 0 1) =5
                 sum =25

Как видите, High - это наименьшее слово, вы можете поменять местами младшие и младшие слова или использовать цифры для обозначения слова. Я бы порекомендовал использовать цифры

0 голосов
/ 03 мая 2020

Здесь s - это последовательность строк, когда вы делаете это: (s> 'Low')

Здесь строки сравниваются, когда вы рассматриваете значения ASCII (H-72, L-76, M-77).

Только Medium (M-77) больше Low (L-76), но High (H-72) меньше Low (L-76).

Надеюсь, вы поняли мою точку зрения.

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