假设我有类别,1 到 10,我想分配 red
值 3 到 5, green
到 1,6 和 7,以及 blue
到 2、8、9 和 10。
我该怎么做?如果我尝试
df.cat.rename_categories(['red','green','blue'])
我得到一个错误: ValueError: new categories need to have the same number of items than the old categories!
但如果我把它放在
df.cat.rename_categories(['green','blue','red', 'red', 'red'
'green', 'green', 'blue', 'blue' 'blue'])
我会收到一条错误消息,指出存在重复值。
我能想到的唯一其他方法是编写一个 for 循环,它将遍历值的字典并替换它们。有没有更优雅的解决方法?
原文由 Minh Mai 发布,翻译遵循 CC BY-SA 4.0 许可协议
不确定是否优雅,但如果您将旧类别改为新类别,例如(注意添加的“紫色”):
您可以使用它来构建一个新的分类系列:
如果您确定所有分类值都将显示在列中,则不需要
categories=set(m2.values())
(如果您关心分类排序,则需要有序的等价物)。但是在这里,如果我们不这样做,我们就不会在生成的 Categorical 中看到purple
,因为它是根据它实际看到的类别构建的。当然,如果您已经构建了列表
['green','blue','red', etc.]
,那么直接使用它来创建新的分类列并完全绕过此映射同样容易。