【发布时间】:2021-05-31 23:37:21
【问题描述】:
我有一个包含多个系列的 pandas 数据框,我按其中一些对这个数据框进行排序:
df = df.sort_values(by=['Col1', 'Col2', 'Col3', 'Col4', 'Col5'])
这很好用!但是德语变音不是“德语顺序”,所以 Ä 不在 A 和 B 之间,而是排在 Z 之后。“丹麦”也排在“齐默尔曼”之后,因为 pandas 排序算法似乎是区分大小写的.
我找到了按一个系列 (e. g. here) 对数据框进行排序的解决方案,但没有找到按多个系列排序的解决方案。在所有系列中,变音符号都是可能的。所以我尝试了一点——也许这对某人有帮助。 :-)
解决方案:
df = df.sort_values(by=['Col1', 'Col2', 'Col3', 'Col4', 'Col5'], key=lambda col: col.str.lower().str.normalize('NFD'))
str.lower() 解决了字符串“丹麦”排在“齐默尔曼”之后的问题
str.normalize('NFD') 解决了德语变音符号的问题。
【问题讨论】:
-
这可行,但如果有混合数字(作为字符串)和单词,它会错误地对数字进行排序。例如,它将 100 排在 20 之前。如何解决?
-
您能否发布您的“解决方案”作为答案,并接受答案?所以人们知道它已经解决了吗?