我有一个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