gpt4 book ai didi

python - pandas:将多个类别合并为一个

转载 作者:太空狗 更新时间:2023-10-30 02:10:04 26 4
gpt4 key购买 nike

假设我有类别,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 循环,它会遍历值的字典并替换它们。有没有更优雅的解决方法?

最佳答案

不确定是否优雅,但如果您将旧类别改为新类别,例如(注意添加的“紫色”):

>>> m = {"red": [3,4,5], "green": [1,6,7], "blue": [2,8,9,10], "purple": [11]}
>>> m2 = {v: k for k,vv in m.items() for v in vv}
>>> m2
{1: 'green', 2: 'blue', 3: 'red', 4: 'red', 5: 'red', 6: 'green',
7: 'green', 8: 'blue', 9: 'blue', 10: 'blue', 11: 'purple'}

您可以使用它来构建一个新的分类系列:

>>> df.cat.map(m2).astype("category", categories=set(m2.values()))
0 green
1 blue
2 red
3 red
4 red
5 green
6 green
7 blue
8 blue
9 blue
Name: cat, dtype: category
Categories (4, object): [green, purple, red, blue]

如果您确定所有分类值都是列中看到。但在这里,如果我们不这样做,我们就不会在生成的 Categorical 中看到 purple,因为它是根据它实际看到的类别构建的。

当然,如果您已经构建了列表['green','blue','red', etc.],那么直接使用它创建一个新的分类列同样简单,完全绕过这个映射。

关于python - pandas:将多个类别合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32262982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com