我有一个
DataFrame
,其中包含来自我想要排序的数据库中的 UPPERCASE
列名称。其中一些带有下划线前缀 _
。默认排序将它们放在最后。我是否必须将它们转换为小写,然后排序,然后将它们转换回大写,或者有更简单的方法吗?
这是一些示例数据。当
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