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 按字母顺序然后按数字的主要内容,如果未能解决你的问题,请参考以下文章