【发布时间】:2021-09-08 14:51:20
【问题描述】:
我正在寻找一种对 pandas DataFrame 进行排序的方法。 pd.DataFrame.sort_values 不接受按键功能。我可以将其转换为列表并将密钥应用于sorted 函数,但这会很慢。另一种方式似乎与分类索引有关。我没有固定的行数,所以我不知道分类索引是否适用。
我已经给出了我想要排序什么样的数据的示例案例:
输入数据帧:
clouds fluff
0 {[} 1
1 >>> 2
2 {1 3
3 123 4
4 AAsda 5
5 aad 6
输出数据帧:
clouds fluff
0 >>> 2
1 {[} 1
2 {1 3
3 123 4
4 aad 6
5 AAsda 5
排序规则(优先级):
第一个特殊字符(它们之间按 ascii 排序)
接下来是数字
接下来是小写字母(按字典顺序)
接下来是大写字母(按字典顺序)
在普通的 python 中我会这样做
from functools import cmp_to_key
def ks(a, b):
# "Not exactly this but similar"
if a.isupper():
return -1
else:
return 1
案例
sorted(['aa', 'AA', 'dd', 'DD'], key=cmp_to_key(ks))
答案:
['DD', 'AA', 'aa', 'dd']
你会如何处理 Pandas?
【问题讨论】:
-
@hellpanderr,是的,但我不知道如何将这个问题翻译成那样。
-
@Goyo,将示例从 Column 更改为
pd.DataFrame。 -
GitHub 上有一个与此相关的issue。