了解熊猫的“类别”规模

时间:2020-05-03 15:16:00

标签: python pandas dataframe

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返回True,为什么?我在做什么错了?

3 个答案:

答案 0 :(得分:3)

在我的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

docs中查看更多信息。

一种更简洁的方法(即,无需显式导入)使用pd.Categorical()

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

s = pd.Series(raw_cat)

答案 1 :(得分:0)

在此,s是一系列字符串:(s>'Low')

当您考虑ASCII值(H-72,L-76,M-77)时,这里的字符串将被比较。

仅中等(M-77)大于低(L-76),但高(H-72)小于低(L-76)。

我希望你明白我的意思。

答案 2 :(得分:0)

之所以发生这种情况,是因为ASCII值“低”的总和小于其他值,但哈希值却没有。

根据Ascii sum-

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

  306    609     384

哈希值-

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

您会看到“高”是最小的单词,您可以将“低”和“高”互换,或使用数字来表示该单词。 我建议使用数字