pandas数据帧中的自定义数据排序(字母+整数)



我有一个数据帧,需要对一列的内容进行排序(逗号分隔((按字母顺序+数字(:

输入:-

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

相关内容

最新更新