Pet*_*ter 2 python sorting dataframe pandas
我有一个如下所示的 pandas DataFrame:
df = pd.DataFrame({["id": [1, 2, 3, 4, 5],
"fruit": ["apple", "banana", "pineapple", "orange", "orange"],
"trash": [38, 22, 93, 1, 15]})
Run Code Online (Sandbox Code Playgroud)
fruit现在我想根据提供的有序列表对该 DataFrame 的行在 column 上进行排序。可以说这个列表是:
ordered_list = ["pinapple", "banana", "orange", "apple"]
Run Code Online (Sandbox Code Playgroud)
我想产生以下输出(我不关心具有相同水果值的行的顺序,因此行orange可能会颠倒):
id fruit trash
3 pineapple 93
2 banana 22
4 orange 1
5 orange 15
1 apple 38
Run Code Online (Sandbox Code Playgroud)
怎么解决这个问题呢?我知道我可以使用一些 for 循环,但如果没有更优雅的解决方案(我无法找到),我会感到惊讶。该解决方案应该尽可能节省时间,因为真正的 DataFrame 由大约 5000 行组成(大约有 50 个唯一fruit值)
将列转换Fruit为有序分类类型并对值进行排序
df['fruit'] = pd.Categorical(df['fruit'], ordered_list, ordered=True)
df.sort_values('fruit')
Run Code Online (Sandbox Code Playgroud)
通过传递一个键函数对值进行排序,该函数将水果名称映射到相应的顺序
df.sort_values('fruit', key=lambda x: x.map({v:k for k, v in enumerate(ordered_list)}))
Run Code Online (Sandbox Code Playgroud)
id fruit trash
2 3 pineapple 93
1 2 banana 22
3 4 orange 1
4 5 orange 15
0 1 apple 38
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
734 次 |
| 最近记录: |