Pandas如何保留前两行后对Ranking_value为0的行按Processing_time升序排序
Pandas 实现方案
核心逻辑为将数据集拆分为「Ranking_value非0」和「Ranking_value为0」两部分,前者保留原有顺序,后者按指定规则排序后再合并。
完整代码
import pandas as pd # 构造示例数据(实际使用时替换为你自己的DataFrame即可) df = pd.DataFrame({ "Testcase": ["t1", "t2", "t3", "t4"], "Processing_time": [1.102088, 1.718864, 25, 15], "Pass": [8, 19, 22, 22], "Fail": [26, 3, 0, 0], "avg_failure_rate": [76.47, 13.63, 0, 0], "Ranking_value": [69.38, 7.93, 0, 0] }) # 1. 筛选出Ranking_value不等于0的行,直接保留原顺序 df_part1 = df[df["Ranking_value"] != 0] # 2. 筛选出Ranking_value等于0的行,按Processing_time升序排序 df_part2 = df[df["Ranking_value"] == 0].sort_values(by="Processing_time", ascending=True) # 3. 拼接两部分数据,重置索引 res_df = pd.concat([df_part1, df_part2], ignore_index=True) # 输出结果验证 print(res_df)
注意事项
如果Ranking_value字段为浮点类型,存在精度误差导致==0判断失效的情况,可以使用numpy.isclose做近似判断,修改筛选逻辑为:
import numpy as np df_part1 = df[~np.isclose(df["Ranking_value"], 0)] df_part2 = df[np.isclose(df["Ranking_value"], 0)].sort_values(by="Processing_time", ascending=True)
内容的提问来源于stack exchange,提问作者user16363601
相关产品推荐
相关产品推荐

