Python pandas dataframe sort_values不起作用

jef*_*sia 0 python pandas

我有以下pandas数据框,我想按'test_type'排序

  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
Run Code Online (Sandbox Code Playgroud)

我加载数据帧并对其进行排序的代码是,第一个打印行打印上面的数据框.

        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
Run Code Online (Sandbox Code Playgroud)

在对数据帧内容进行排序和打印之后,数据框仍然如下所示.

节目输出:

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
Run Code Online (Sandbox Code Playgroud)

我希望第3行(测试类型:sso_500行)在排序后位于顶部.有人可以帮我解释为什么它不能正常工作吗?

Ami*_*ory 5

Presumbaly,你要做的是按照后面的数值排序sso_.你可以这样做:

import numpy as np

df.ix[np.argsort(df.test_type.str.split('_').str[-1].astype(int).values)
Run Code Online (Sandbox Code Playgroud)

这个

  1. 将字符串拆分为 _

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

  3. 查找根据数值排序的索引

  4. 根据这些索引重新排序DataFrame

In [15]: df = pd.DataFrame({'test_type': ['sso_1000', 'sso_500']})

In [16]: df.sort_values(by=['test_type'], ascending=True)
Out[16]: 
  test_type
0  sso_1000
1   sso_500

In [17]: df.ix[np.argsort(df.test_type.str.split('_').str[-1].astype(int).values)]
Out[17]: 
  test_type
1   sso_500
0  sso_1000
Run Code Online (Sandbox Code Playgroud)