我有一个数据帧,我想通过一列上的sort_值进行排序。
问题是德语中的元音变调是单词的第一个字母。
像厄斯特里奇,苏里奇。
这对苏黎世来说,厄斯特雷希。
应该是在整理厄斯特雷希,苏里奇。
_应该在N和O之间。
我已经了解了如何使用locale和strxfm处理python中的列表。
我可以在熊猫数据框中直接这样做吗?
编辑:
谢谢您。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)

最佳答案

可以使用unicode nfd normal form

>>> names = pd.Series(['Österreich', 'Ost', 'S', 'N'])
>>> names.str.normalize('NFD').sort_values()
3              N
1            Ost
0    Österreich
2              S
dtype: object

# use result to rearrange a dataframe
>>> df[names.str.normalize('NFD').sort_values().index]

这不完全是你想要的,但是为了正确排序,你需要语言知识(就像你提到的语言环境)。
NFD为元音变调使用两个符号,例如Ö变为O\xcc\x88(您可以用names.str.normalize('NFD').encode('utf-8')看到区别)

07-24 09:52
查看更多