python - 给定该列中值的已排序列表,如何对一列中的熊猫数据框进行排序?
问题描述
我有一个如下所示的熊猫数据框:
df = pd.DataFrame({["id": [1, 2, 3, 4, 5],
"fruit": ["apple", "banana", "pineapple", "orange", "orange"],
"trash": [38, 22, 93, 1, 15]})
fruit
现在我想根据提供的有序列表对 column 上这个 DataFrame 的行进行排序。可以说这个列表是:
ordered_list = ["pinapple", "banana", "orange", "apple"]
我想产生以下输出(我不关心具有相同水果值的行的顺序,因此orange
行可能会颠倒):
id fruit trash
3 pineapple 93
2 banana 22
4 orange 1
5 orange 15
1 apple 38
如何解决这个问题?我知道我可以使用一些 for 循环,但如果没有更优雅的解决方案(我找不到),我会感到惊讶。该解决方案应尽可能节省时间,因为真正的 DataFrame 包含大约 5000 行(具有大约 50 个唯一fruit
值)
解决方案
方法一
将Fruit
列转换为有序分类类型并对值进行排序
df['fruit'] = pd.Categorical(df['fruit'], ordered_list, ordered=True)
df.sort_values('fruit')
方法二
通过传递一个键函数对值进行排序,该函数将水果名称映射到相应的顺序
df.sort_values('fruit', key=lambda x: x.map({v:k for k, v in enumerate(ordered_list)}))
id fruit trash
2 3 pineapple 93
1 2 banana 22
3 4 orange 1
4 5 orange 15
0 1 apple 38
推荐阅读
- javascript - 如何使用 Nodejs 中的全局对象获取常量变量?
- python - 访问用户定义对象中的字典值并将它们添加到列表中
- php - Xdebug 在 PhpStorm 上不起作用 - PHP 7.2.10,Ubuntu 18.04.01
- firebase - 阵列操作的 Cloud Firestore 安全规则
- ember.js - 如何确定调用函数的位置?
- c# - 如何在 C# 中使用 Azure Functions 读取 Blob 输入绑定中的 XML 文件?
- node.js - 更改 JSON 文件路径并从外部加载到内部
- java - Mockito:如何模拟functionToBeTested中另一个类的函数行为?
- python - 检查 False 作为字典中的任何值
- python - python数字生成器可能的无限循环