【发布时间】:2021-08-18 15:45:54
【问题描述】:
我有一个 pandas 数据框,我想按其中一列进行排序。问题是,需要排序的数据如下所示:“'Number 1' - Specimen 'Number 2'”。 我想先按“数字 1”排序,然后按“数字 2”排序。
一个例子:
import pandas as pd
df = pd.DataFrame({'Name': ['12001 - Specimen 10', '12000 - Specimen 1', '12000 - Specimen 10',
'12000 - Specimen 2', '12000 - Specimen 5', '12001 - Specimen 1',
'12001 - Specimen 2'],
'Results': [2, 4, 2, 3, 10, 8, 2]})
df.sort_values('Name')
Name Results
1 12000 - Specimen 1 4
2 12000 - Specimen 10 2
3 12000 - Specimen 2 3
4 12000 - Specimen 5 10
5 12001 - Specimen 1 8
0 12001 - Specimen 10 2
6 12001 - Specimen 2 2
这正确地按第一个数字排序,但对于秒数,它将 10 放在 2 之前。
我已经看到发布了两个类似的问题,但在这些情况下,它们的数字和字符串由“_”分隔,并且答案建议在排序之前将它们分开。我尝试做类似的事情,但最终只按第二个数字排序。
sort dataFrame index containing string and number
Sort DataFrame index that has a string and number
如果可能的话,我更喜欢可以完全在 pandas 中完成而无需其他包的东西。
【问题讨论】:
-
"12001 - Specimen 10" 是一个字符串,所以基本上它们是按字母顺序排序的(或基于字符串的 ASCII 值)。我将首先通过正则表达式解析字符串,然后将样本编号(int 类型)放入另一列。在这种情况下,您可以轻松地按 Specimen 排序。
-
或者您可以在执行
sort_values时将从正则表达式中提取的结果作为key传递,这样您就不必添加另一列。