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,为什么?我在做什么错了?
答案 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
您会看到“高”是最小的单词,您可以将“低”和“高”互换,或使用数字来表示该单词。 我建议使用数字