按第二列对熊猫数据框重新排序

时间:2020-07-17 13:17:35

标签: python 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 个答案:

答案 0 :(得分: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'

答案 1 :(得分:2)

让我们尝试index_natsorted中的natsort

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

答案 2 :(得分:0)

如果要使用split,则可以使用:

添加新行。
 df['numbers2']=df.numbers.str.split('-').str[0].astype('int')

然后在此新列上应用sort_values