首页 > 解决方案 > 给定该列中值的已排序列表,如何对一列中的熊猫数据框进行排序?

问题描述

我有一个如下所示的熊猫数据框:

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值)

标签: pythonpandasdataframesorting

解决方案


方法一

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

推荐阅读