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)
您可以使用(或)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)