根据字母表对列进行排序(A00、B00、AA0、AB0、BA0 等)

Ash*_*ish 3 python dataframe pandas

我有一个带有字母值的数据框。我想根据字母表对其进行排序,如下所述。输入我有:

A00
B00
AA0
BA0
AB0
C00
Z00
Run Code Online (Sandbox Code Playgroud)

我需要的输出:

A00
B00
C00
Z00
AA0
AB0
BA0
Run Code Online (Sandbox Code Playgroud)

问题是,使用 sort_values 时,我得到以下输出,因为值是根据第一个字母排序的,并且 AA0 和 AB0 在 A00 之后,BA0 在 B00 之后。我想要在 Z00 之后有这些:

A00
AA0
AB0
B00
BA0
C00
Z00
Run Code Online (Sandbox Code Playgroud)

moz*_*way 6

您可以使用(或)extract在字母的左侧填充 0 ,然后将其用作:zfillrjustkeysort_values

out = df.sort_values(by='col', key=lambda s: s.str.extract('([a-zA-Z]+)', expand=False).str.zfill(10))
Run Code Online (Sandbox Code Playgroud)

输出:

   col
0  A00
1  B00
5  C00
6  Z00
2  AA0
4  AB0
3  BA0
Run Code Online (Sandbox Code Playgroud)

中间的:

df['col'].str.extract('([a-zA-Z]+)', expand=False).str.zfill(10)

0    000000000A
1    000000000B
2    00000000AA
3    00000000BA
4    00000000AB
5    000000000C
6    000000000Z
Name: col, dtype: object
Run Code Online (Sandbox Code Playgroud)

rjust

df['col'].str.extract('([a-zA-Z]+)', expand=False).str.rjust(10)

0             A
1             B
2            AA
3            BA
4            AB
5             C
6             Z
Name: col, dtype: object
Run Code Online (Sandbox Code Playgroud)