我有一个数据帧,需要对一列的内容进行排序(逗号分隔((按字母顺序+数字(:
输入:-
Invoice Number
0 IN-2
1 IN-1
2 IN-5
3 IN-20
4 IN-10
我想要像一样的输出
Invoice Number
0 IN-1
1 IN-2
2 IN-5
3 IN-10
4 IN-20
我试过
df.sort_values(by=[Invoice Number'](
但它排序:
Invoice Number
0 IN-1
1 IN-10
2 IN-2
3 IN-20
4 IN-5
如果有人知道如何对我的数据(字母+整数(值进行排序,请告诉我。
您可以简单地使用sort_values
:的key
选项
df.sort_values(by='Number', key=lambda x: x.str[3:].astype(int))
它所做的是摆脱";IN—";部件并转换为内部
尝试使用占位符列:
df['_'] = df['Invoice Number'].str.split('-').str[1].astype(int)
print(df.sort_values('_').drop('_', axis=1).reset_index(drop=True))
或者使用key
参数:
print(df.sort_values('Invoice Number', key=lambda x: x.str.split('-').str[1].astype(int))
两个代码输出:
Invoice Number
0 IN-1
1 IN-2
2 IN-5
3 IN-10
4 IN-20
natsort
在以下情况下很有帮助:
import pandas as pd
from natsort import natsort_key
df = pd.DataFrame({'Invoice': {0: 0, 1: 1, 2: 2, 3: 3, 4: 4},
'Number': {0: 'IN-2', 1: 'IN-1', 2: 'IN-5', 3: 'IN-20',
4: 'IN-10'}})
df = df.sort_values('Number', key=natsort_key)
df
:
Invoice Number
1 1 IN-1
0 0 IN-2
2 2 IN-5
4 4 IN-10
3 3 IN-20
一个更有趣的例子:
df = pd.DataFrame({'Invoice': {0: 0, 1: 1, 2: 2, 3: 3, 4: 4},
'Number': {0: 'RHKW-11', 1: 'AB-1', 2: 'IN-5', 3: 'IN-20',
4: 'RHKW-102'}})
df
:
Invoice Number
0 0 RHKW-11
1 1 AB-1
2 2 IN-5
3 3 IN-20
4 4 RHKW-102
df = df.sort_values('Number', key=natsort_key)
:
Invoice Number
1 1 AB-1
2 2 IN-5
3 3 IN-20
0 0 RHKW-11
4 4 RHKW-102