我有以下pandas数据框,我想按' test_type'
排序 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
在对数据帧内容进行排序和打印之后,数据框仍然如下所示。
节目输出:
{{1}}
我希望第3行(测试类型:sso_500行)在排序后位于顶部。有人可以帮我解释为什么它不能正常工作吗?
答案 0 :(得分:5)
Presumbaly,您尝试做的是按sso_
之后的数值排序。您可以按如下方式执行此操作:
import numpy as np
df.ix[np.argsort(df.test_type.str.split('_').str[-1].astype(int).values)
这个
将字符串拆分为_
将此字符后的内容转换为数值
查找根据数值
根据这些索引重新排序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
答案 1 :(得分:3)