python - 使用分类列根据数组对数据框进行排序
问题描述
我有一个这样的数组:
['A 100', 'A 200', 'A 300', 'A 400', 'A 500', 'B 100', 'B 200', 'B 300', 'B 400']
我也有这样的数据框:
BIN CA SUM
100 B B 100
300 A A 300
300 B B 300
400 B B 400
400 A A 400
200 B B 200
100 A A 100
200 A A 200
我想用来pd.Categorical
根据数组对列数据框进行排序。
预期的输出是:
BIN CA SUM
100 A A 100
200 A A 200
300 A A 300
400 A A 400
100 B B 100
200 B B 200
300 B B 300
400 B B 400
解决方案
您可以使用pd.Categorical
将SUM
列转换为具有顺序的分类列,然后sort
是值:
df['SUM'] = pd.Categorical(df['SUM'], categories=arr, ordered=True)
df.sort_values('SUM')
或者,您可以创建一个字典,将项目映射arr
到它们的排序顺序,然后.map
在SUM
列上创建这个字典,并使用它np.argsort
来获取将对数据帧进行排序的索引:
dct = {v: i for i, v in enumerate(arr)}
df.iloc[np.argsort(df['SUM'].map(dct))]
BIN CA SUM
6 100 A A 100
7 200 A A 200
1 300 A A 300
4 400 A A 400
0 100 B B 100
5 200 B B 200
2 300 B B 300
3 400 B B 400
推荐阅读
- python - 为什么我不能通过 POST 将数据返回到这个 jsf
- python - 如何从命令行初始化要在多个调用 Python 中使用的对象
- twig - 带有木材和 ACF 灵活内容的古腾堡积木
- javascript - 两种方式绑定 ngStyle
- mysql - 如果记录已在 mySQL 表中删除,如何避免重复?
- sql - 将列添加到 sqlite 数据库并根据主键分配行
- azure - ExecutionContext 对通过 IoC 的非函数方法为空,替代 ExecutionContext.FunctionAppDirectory
- javascript - Electron app.makeSingleInstance 避免多个实例抛出 javascript 错误
- c - 具有大 int 的 Segfault - 内存不足?
- r - 在嵌套循环中运行 R t.test