如果我有枚举类:
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 answer 和 this one 的组合:使用 pd.Categorical
按 Colors
类排序(稍加修改以更改其 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/