【问题标题】:Pandas str alphabetically then numericallyPandas str 按字母顺序然后按数字
【发布时间】: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”之前吗?

标签: python string pandas sorting dataframe


【解决方案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:]))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多