【发布时间】:2019-08-07 01:53:54
【问题描述】:
我有一个数据框,我想通过 sort_values 在一列上进行排序。
问题是单词的第一个字母是德语变音符号。
就像苏黎世的 Österreich。
这将排序到苏黎世,Österreich。 应该是排序 Österreich, Zürich。
Ö应该在N和O之间。
我发现了如何在 python 中使用语言环境和 strxfrm 来处理列表。 我可以以某种方式直接在 pandas 数据框中执行此操作吗?
编辑: 谢谢你。 Stef 示例工作得很好,不知何故我有数字,他的版本与我的现实生活中的 Dataframe 示例不兼容,所以我使用了 alexey 的想法。 我做了以下,也许你可以缩短这个..:
df = pd.DataFrame({'location': ['Österreich','Zürich','Bern', 254345],'code':['ö','z','b', 'v']})
#create index as column for joining later
df = df.reset_index(drop=False)
#convert int to str
df['location']=df['location'].astype(str)
#sort by location with umlaute
df_sort_index = df['location'].str.normalize('NFD').sort_values(ascending=True).reset_index(drop=False)
#drop location so we dont have it in both tables
df = df.drop('location', axis=1)
#inner join on index
new_df = pd.merge(df_sort_index, df, how='inner', on='index')
#drop index as column
new_df = new_df.drop('index', axis=1)
【问题讨论】:
-
你检查过 alexey 方法的输出吗?我得到 Ö 或 ü 的变音点不是在 O 或 u 上,而是在 IDLE 中的一个空格上。在控制台上,它会使用退格键将它们放在 O 或 u 上,但下一列不再对齐。 Firefox 还显示它们发生了变化(
Österreich而不是Österreich)所以你必须在最终结果中恢复规范化。 -
对不起,我不确定您的确切意思,我将结果导出到 Excel,它们看起来还不错?
标签: python pandas sorting dataframe locale