如何对以下dataframe进行排序:
df = pd.DataFrame({'a':['abc_1.2.6','abc_1.2.60','abc_1.2.7','abc_1.2.9','abc_1.3.0','abc_1.3.10','abc_1.3.100','abc_1.3.11'], 'b':[1,2,3,4,5,6,7,8]})
>>>
a b
0 abc_1.2.6 1
1 abc_1.2.60 2
2 abc_1.2.7 3
3 abc_1.2.9 4
4 abc_1.3.0 5
5 abc_1.3.10 6
6 abc_1.3.100 7
7 abc_1.3.11 8
以实现这一输出?
>>>
a b
0 abc_1.2.6 1
1 abc_1.2.7 3
2 abc_1.2.9 4
3 abc_1.2.60 2
4 abc_1.3.0 5
5 abc_1.3.10 6
6 abc_1.3.11 8
7 abc_1.3.100 7
我知道字符串中的整数可以通过字符串转换来访问,但是我不确定如何在数据框架中处理这个问题,显然df.sort_values(by=['a'],ignore_index=True)
在这种情况下是没有帮助的。
3条答案
按热度按时间carvr3hs1#
一种使用方法是
natsorted
和iloc
:或者更短,如@Stef所建议的,使用
natsort_key
作为sort_values
的键:输出:
hmae6n7t2#
您可以在排序之前对值应用
key
函数:wgeznvg73#
下面是使用
str.findall()
和explode()
的另一种方法输出: