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)