我的 Pandas 数据框包含以下数据:
product,values
a1, 10
a5, 20
a10, 15
a2, 45
a3, 12
a6, 67
我必须根据产品列对这个数据框进行排序。因此,我想得到以下输出:product,values
a10, 15
a6, 67
a5, 20
a3, 12
a2, 45
a1, 10
不幸的是,我面临以下错误:最佳答案
您可以先 extract
digits
并通过 int
转换为 astype
。然后 sort_values
列 sort
和最后 drop
此列:
df['sort'] = df['product'].str.extract('(\d+)', expand=False).astype(int)
df.sort_values('sort',inplace=True, ascending=False)
df = df.drop('sort', axis=1)
print (df)
product values
2 a10 15
5 a6 67
1 a5 20
4 a3 12
3 a2 45
0 a1 10
这是必要的,因为如果只使用
sort_values
:df.sort_values('product',inplace=True, ascending=False)
print (df)
product values
5 a6 67
1 a5 20
4 a3 12
3 a2 45
2 a10 15
0 a1 10
另一个想法是使用
natsort
库:from natsort import index_natsorted, order_by_index
df = df.reindex(index=order_by_index(df.index, index_natsorted(df['product'], reverse=True)))
print (df)
product values
2 a10 15
5 a6 67
1 a5 20
4 a3 12
3 a2 45
0 a1 10