Pandas str 按字母顺序然后按数字

Posted

技术标签:

【中文标题】Pandas str 按字母顺序然后按数字【英文标题】:Pandas str alphabetically then numerically 【发布时间】:2018-11-23 09:33:15 【问题描述】:

这可能是一个简单的问题,我只是找不到答案。在像下面这样的 pandas DataFrame 中,对象如何先按字母顺序排序,然后再按数字排序。

开始:

import pandas as pd

d ='col1': ['A1','B2','A10','A7','C4','C2','C22','B4']
df = pd.DataFrame(data=d)
df

  col1
0   A1
1   A7
2  A10
3   B2
4   B4
5   C2
6   C4
7  C22

我想得到什么:

  col1
0   A1
1   A7
2  A10
3   B2
4   B4
5   C2
6   C4
7  C22

我得到了什么:

>>>df.sort_values(by='col1')

  col1
0   A1
2  A10
1   A7
3   B2
4   B4
5   C2
7  C22
6   C4

【问题讨论】:

lot_file['SPOOL'] 的类型是什么? 这不是一个有效的列表,除非 A39 等是变量名。至少提供一些我们可以复制的东西 另外,你的排序逻辑是什么? “A30”在“A4”之前吗? 【参考方案1】:

使用 Pandas 对列表进行排序有点过头了:

lot_file = pd.DataFrame()
lot_file['SPOOL'] = ['A39','B34','A3','B37','A6','B18','A48','B15','A47']
group_lots = lot_file.sort_values(by=['SPOOL'])
group_lots['SPOOL'].tolist()

输出:

['A3', 'A39', 'A47', 'A48', 'A6', 'B15', 'B18', 'B34', 'B37']

或使用sorted

spool_list = ['A39','B34','A3','B37','A6','B18','A48','B15','A47']
sorted(spool_list)

输出:

['A3', 'A39', 'A47', 'A48', 'A6', 'B15', 'B18', 'B34', 'B37']

【讨论】:

同意 - 对于正确的顺序,可以使用密钥sorted(spool_list, key=lambda x: 10**2*ord(x[0]) + int(x[1:]))

以上是关于Pandas str 按字母顺序然后按数字的主要内容,如果未能解决你的问题,请参考以下文章

按数字(最高优先)然后按字母(字母顺序)对对象集合进行排序

php 按字母顺序排序数组然后按数字排序

用单词和数字按字母顺序排列字符串

sql server 按字母顺序排序,然后是数字

java正则表达式能不能不按顺序匹配?

ID 按字母顺序而不是数字顺序