按照第二列重新排序pandas数据框

3

我需要按照第二列重新排序pandas数据框:

  colors        numbers
0    red      '1 - 49 ch'
1  white    '10 - 490 ch'
3   blue  '100 - 4900 ch'
4   green  '2 - 3000 ch'
5   blue  '10 - 4900 ch'
6   blue  '1 - 49 ch'

这一列包含了需要拆分并按第一个元素排序的字符串,以得到以下结果:

  colors        numbers
0    red      '1 - 49 ch'
1   blue  '1 - 49 ch'
2   green  '2 - 3000 ch'
3  white    '10 - 490 ch'
4   blue  '10 - 4900 ch'
5   blue  '100 - 4900 ch'

如何遍历第二列以获得所需结果?
for i in df['numbers']:
    print(i.split(" - ")[0])

谢谢

3个回答

2
我们可以尝试提取数字,并对其进行排序:
(df.join(df.numbers.str.extract('(\d+) - (\d+)').astype(int))
   .sort_values([0,1], kind='mergesort')
   .drop([0,1], axis=1)
)

输出:

  colors          numbers
0    red      '1 - 49 ch'
6   blue      '1 - 49 ch'
4  green    '2 - 3000 ch'
1  white    '10 - 490 ch'
5   blue   '10 - 4900 ch'
3   blue  '100 - 4900 ch'

2

让我们尝试使用natsort中的index_natsorted

from natsort import index_natsorted
df=df.iloc[index_natsorted(df.numbers)]

1
不要忘记添加 pip install natsort,因为我认为它不是标准库的一部分 :) - Umar.H

0

如果您想使用split,您可以使用以下代码添加新行:

 df['numbers2']=df.numbers.str.split('-').str[0].astype('int')

然后在这个新列上应用sort_values函数


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