我有以下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行)在排序后位于顶部.有人可以帮我解释为什么它不能正常工作吗?
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)
这个
将字符串拆分为 _
将此字符后的内容转换为数字值
查找根据数值排序的索引
根据这些索引重新排序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)