在大写字母之前对下划线进行排序



我有一个DataFrameUPPERCASE列名,来自要排序的数据库。其中一些列名的前缀是下划线_。默认排序将它们放在最后。我必须将它们转换为小写,然后排序,然后将它们转换回大写吗?或者有更简单的方法吗?

这是一些样本数据。如果cl2的值为小写,则顺序为正确。大写字母不那么多。

pd.DataFrame({
"cl1": ["foo", "foo", "foo"], 
"cl2": ["_FOO", "BAR", "BAZ"]}
).sort_values(["cl1", "cl2"])

如果转换为小写对您有效,您可以将其用作密钥:

pd.DataFrame({
"cl1": ["foo", "foo", "foo"], 
"cl2": ["_FOO", "BAR", "BAZ"]}
).sort_values(["cl1", "cl2"], key=lambda s: s.str.lower())

其他选项,按没有_的字符串排序,然后按存在_:

(pd.DataFrame({
"cl1": ["foo", "foo", "foo"], 
"cl2": ["_FOO", "BAR", "BAZ"]})
.sort_values(["cl1", "cl2"], key=lambda s: s.str.lstrip('_'))
.sort_values(["cl1", "cl2"], key=lambda s: ~s.str.startswith('_'), kind='stable')
)

输出:

cl1   cl2
0  foo  _FOO
1  foo   BAR
2  foo   BAZ

最新更新