如何使用Python Pandas按特定(字符串)列对数据框进行排序?

9

我的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

很不幸,我遇到了以下错误:

ErrorDuringImport(path, sys.exc_info())

ErrorDuringImport: views 中出现问题 - 类型为 'exceptions.Indentation'


注意:本文中的 HTML 标签已保留。
2个回答

17
您可以先使用 extract 函数提取出数字,然后通过 astype 将其转换为整数类型。接着对 sort 列进行 sort_values 排序,最后再 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

我正在使用Python 2.7版本。 - Sai Rajesh
我认为复制错误文本,在问题的标签下面点击“编辑”,并将文本粘贴到问题文本下面。谢谢。 - jezrael
给我一个解决方案。 - Sai Rajesh
如果你使用的是Windows操作系统,可以尝试更新pandas库。在命令行中输入conda update pandas即可。 - jezrael
我无法做到那个...因为那个Anaconda是内置在我们的产品中的。 - Sai Rajesh
显示剩余11条评论

0
import pandas as pd
df = pd.DataFrame({
   "product": ['a1,', 'a5,', 'a10,', 'a2,','a3,','a6,'],
   "value": [10, 20, 15, 45, 12, 67]
})
df
==>
  product   value
0   a1,      10
1   a5,      20
2   a10,     15
3   a2,      45
4   a3,      12
5   a6,      67


df.sort_values(by='product', key=lambda col: col.str[1:-1].astype(int), ascending=False)
==>
  product   value
2   a10,     15
5   a6,      67
1   a5,      20
4   a3,      12
3   a2,      45
0   a1,      10


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接