python-3.x - Python pandas 按枚举类值对数据帧进行排序

标签 python-3.x pandas sorting enums categorical-data

如果我有枚举类:

from enum import Enum
class Colors(Enum):
    RED = 1
    ORANGE = 2
    GREEN = 3
如果我有一个数据框,它的一列是颜色(它可以是小写的):
>>> import pandas as pd
>>> df = pd.DataFrame({'X':['A', 'B', 'C', 'A'], 'color' : ['GREEN', 'RED', 'ORANGE', 'ORANGE']})
>>> df
   X   color
0  A   GREEN
1  B     RED
2  C  ORANGE
3  A  ORANGE
如何将颜色列作为尊重颜色类值的分类类型,并按“颜色”和“X”(升序)对数据框进行排序?
例如,上面的数据框应该排序为:
X, color
--------
B, RED
A, ORANGE
C, ORANGE
A, GREEN

最佳答案

this answerthis one 的组合:使用 pd.CategoricalColors 类排序(稍加修改以更改其 str ):

from enum import Enum
import pandas as pd

df = pd.DataFrame({'X':['A', 'B', 'C', 'A'], 'color' : ['GREEN', 'RED', 'ORANGE', 'ORANGE']})

class Colors(Enum):
    RED = 1
    ORANGE = 2
    GREEN = 3
    def __str__(self):
        return self.name

df['color'] = pd.Categorical(df['color'], [str(i) for i in Colors], ordered=True)
df = df.sort_values(['color','X'])

结果:
   X   color
1  B     RED
3  A  ORANGE
2  C  ORANGE
0  A   GREEN

关于python-3.x - Python pandas 按枚举类值对数据帧进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62277882/

相关文章:

python - 无法从 Android 上的 Kivy 应用程序发送蓝牙

python-3.x - Python 3 中还有协程吗?

python - 基于两列值从 pandas 数据框中有效提取信息

python-3.x - 如何用趋于零的值填充 NAN,直到下一个有效值?

xml - xsl : sort nodes by values of subnode

python - 删除python中pandas中重复标题或字符串相同列和空行的行

python - 如何在 python 中优雅地交错两个长度不均匀的列表?

python - 从多个列创建新的 pandas 列

php - 数组按索引变量排序

javascript - 以随机顺序对数组进行排序