Pandas:如何检查列是否包含值0,然后根据某些规则对选中的行数据进行排序?



我有一个数据帧

Testcase   Processing_time   Pass   Fail   avg_failure_rate   Ranking_value
t1         1.102088        8    26        76.47           69.38
t2         1.718864        19    3        13.63           7.93
t3         25              22    0         0               0
t4         15              22    0         0               0

我想保留前两个测试用例,因为它来自上面的数据框架,但我想根据最短的处理时间列对其余的测试用例进行排序。

所需输出:

TestCase   Processing_time  Pass  Fail  avg_failure_rate  Ranking_value
t1         1.102088        8    26        76.47           69.38
t2         1.718864        19    3        13.63           7.93
t4         15              22    0         0               0
t3         25              22    0         0               0

如果测试用例的排序值等于0,则应该根据最短处理时间规则对它们进行排序。有什么办法可以做到这一点吗?

.loc排序为0的过滤器,按.sort_values()排序。然后在秩值不等于0的部分后面加上.append(),如下:

df.loc[df['Ranking_value'] != 0].append(df.loc[df['Ranking_value'] == 0].sort_values('Processing_time'))

结果:

Testcase  Processing_time  Pass  Fail  avg_failure_rate  Ranking_value
0       t1         1.102088     8    26             76.47          69.38
1       t2         1.718864    19     3             13.63           7.93
3       t4        15.000000    22     0              0.00           0.00
2       t3        25.000000    22     0              0.00           0.00

分两步完成,拆分数据框,然后返回concat

idx = df.index[df.Ranking_value==0]
out = pd.concat([df.drop(idx),df[idx].sort_values('Processing_time')])
Out[120]: 
Testcase  Processing_time  Pass  Fail  avg_failure_rate  Ranking_value
0       t1         1.102088     8    26             76.47          69.38
1       t2         1.718864    19     3             13.63           7.93
3       t4        15.000000    22     0              0.00           0.00
2       t3        25.000000    22     0              0.00           0.00

试试遮罩。

mask = df.loc[:,“Ranking_value”] == 0. 
df.loc[mask,:].sort_values(“Processing_time”,inplace=True)