Python数据帧排序_值不起作用

Python数据帧排序_值不起作用,python,pandas,Python,Pandas,我有以下熊猫数据框,我想按“测试类型”排序 test_type tps mtt mem cpu 90th 0 sso_1000 205.263559 4139.031090 24.175933 34.817701 4897.4766 1 sso_1500 201.127133 5740.741266 24.599400 34.634209 6864.9820 2 sso_2000 203.2

我有以下熊猫数据框,我想按“测试类型”排序

  test_type         tps          mtt        mem        cpu       90th
0  sso_1000  205.263559  4139.031090  24.175933  34.817701  4897.4766
1  sso_1500  201.127133  5740.741266  24.599400  34.634209  6864.9820
2  sso_2000  203.204082  6610.437558  24.466267  34.831947  8005.9054
3   sso_500  189.566836  2431.867002  23.559557  35.787484  2869.7670
我的代码加载数据帧并排序,第一行打印上面的数据帧

        df = pd.read_csv(file) #reads from a csv file
        print df
        df = df.sort_values(by=['test_type'], ascending=True)
        print '\nAfter sort...'
        print df
在完成排序并打印数据框内容之后,数据框仍然如下所示

程序输出:

After sort...
  test_type         tps          mtt        mem        cpu       90th
0  sso_1000  205.263559  4139.031090  24.175933  34.817701  4897.4766
1  sso_1500  201.127133  5740.741266  24.599400  34.634209  6864.9820
2  sso_2000  203.204082  6610.437558  24.466267  34.831947  8005.9054
3   sso_500  189.566836  2431.867002  23.559557  35.787484  2869.7670

我希望第3行测试类型:sso_500行在排序后位于顶部。有人能帮我弄清楚为什么它不能正常工作吗?

毫无疑问,您要做的是按sso_u2;后的数值排序。您可以按如下方式执行此操作:

import numpy as np

df.ix[np.argsort(df.test_type.str.split('_').str[-1].astype(int).values)
这个

在一个位置拆分字符串_

将此字符后面的内容转换为数值

查找根据数值排序的索引

根据这些索引对数据帧重新排序

范例


或者,您也可以从test_类型中提取数字并对其进行排序。然后根据这些指数重新编制DF指数

df.reindex(df['test_type'].str.extract('(\d+)', expand=False)    \
                          .astype(int).sort_values().index).reset_index(drop=True)

看起来它是按test_类型排序的,test_类型是一个字符串,按字典排序。我想你可能需要把u和zfill拆分为该列的数字部分,我刚刚测试了这个,你是对的。我最终做的是在我的另一个程序csv生成器中重新排列字符串,使其成为500_sso而不是sso_500。这似乎解决了我的问题,我只需要记住以这种方式生成测试类型字符串。1500次sso之后,500次sso仍应进行排序。
df.reindex(df['test_type'].str.extract('(\d+)', expand=False)    \
                          .astype(int).sort_values().index).reset_index(drop=True)