You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Pandas实现测试用例去重并统计每日失败测试次数

问题描述

我正在处理一个分组后的Pandas数据集,结构如下:

test_identifier timestamp   Count_of_Fail_tests test_status
test1   22-08-2022 07:00    0   pass
        23-08-2022 07:00    0   pass
        24-08-2022 07:00    0   pass
        25-08-2022 07:00    0   pass
        26-08-2022 07:00    0   pass
test10  22-08-2022 07:00    0   pass
        23-08-2022 07:00    0   pass
        24-08-2022 07:00    0   pass
        25-08-2022 07:00    0   pass
        26-08-2022 07:00    0   pass
test2   22-08-2022 07:00    2   fail
        23-08-2022 07:00    2   pass
        24-08-2022 07:00    2   pass
        25-08-2022 07:00    2   fail
        26-08-2022 07:00    2   pass
test3   22-08-2022 07:00    0   pass
        23-08-2022 07:00    0   pass
        24-08-2022 07:00    0   pass
        25-08-2022 07:00    0   pass
        26-08-2022 07:00    0   pass
test4   22-08-2022 07:00    1   pass
        23-08-2022 07:00    1   pass
        24-08-2022 07:00    1   pass
        25-08-2022 07:00    1   pass
        26-08-2022 07:00    1   fail

希望对Count_of_Fail_tests列进行去重处理,得到如下输出(移除test_status列也可):

test_identifier timestamp   Count_of_Fail_tests test_status
test1   22-08-2022 07:00    0   pass
        23-08-2022 07:00        pass
        24-08-2022 07:00        pass
        25-08-2022 07:00        pass
        26-08-2022 07:00        pass
test10  22-08-2022 07:00        pass
        23-08-2022 07:00        pass
        24-08-2022 07:00        pass
        25-08-2022 07:00        pass
        26-08-2022 07:00        pass
test2   22-08-2022 07:00    2   fail
        23-08-2022 07:00        pass
        24-08-2022 07:00        pass
        25-08-2022 07:00        fail
        26-08-2022 07:00        pass
test3   22-08-2022 07:00    0   pass
        23-08-2022 07:00        pass
        24-08-2022 07:00        pass
        25-08-2022 07:00        pass
        26-08-2022 07:00        pass
test4   22-08-2022 07:00        pass
        23-08-2022 07:00        pass
        24-08-2022 07:00        pass
        25-08-2022 07:00        pass
        26-08-2022 07:00    1   fail

核心目标是统计每个测试用例每日的失败运行次数,原始DataFrame结构如下:

timestamp   test_identifier test_status
0   22-08-2022 07:00    test1   pass
1   22-08-2022 07:00    test2   fail
2   22-08-2022 07:00    test3   pass
3   22-08-2022 07:00    test4   pass
4   22-08-2022 07:00    test5   pass
5   22-08-2022 07:00    test6   pass
6   22-08-2022 07:00    test7   fail
7   22-08-2022 07:00    test8   pass
8   22-08-2022 07:00    test9   pass
9   22-08-2022 07:00    test10  pass
10  23-08-2022 07:00    test1   pass
11  23-08-2022 07:00    test2   pass
12  23-08-2022 07:00    test3   pass
13  23-08-2022 07:00    test4   pass
14  23-08-2022 07:00    test5   fail
15  23-08-2022 07:00    test6   pass
16  23-08-2022 07:00    test7   pass
17  23-08-2022 07:00    test8   pass
18  23-08-2022 07:00    test9   pass
19  23-08-2022 07:00    test10  pass
20  24-08-2022 07:00    test1   pass
21  24-08-2022 07:00    test2   pass
22  24-08-2022 07:00    test3   pass
23  24-08-2022 07:00    test4   pass
24  24-08-2022 07:00    test5   pass
25  24-08-2022 07:00    test6   pass
26  24-08-2022 07:00    test7   pass
27  24-08-2022 07:00    test8   pass
28  24-08-2022 07:00    test9   pass
29  24-08-2022 07:00    test10  pass
30  25-08-2022 07:00    test1   pass
31  25-08-2022 07:00    test2   fail
32  25-08-2022 07:00    test3   pass
33  25-08-2022 07:00    test4   pass
34  25-08-2022 07:00    test5   pass
35  25-08-2022 07:00    test6   pass
36  25-08-2022 07:00    test7   fail
37  25-08-2022 07:00    test8   pass
38  25-08-2022 07:00    test9   pass
39  25-08-2022 07:00    test10  pass
40  26-08-2022 07:00    test1   pass
41  26-08-2022 07:00    test2   pass
42  26-08-2022 07:00    test3   pass
43  26-08-2022 07:00    test4   fail
44  26-08-2022 07:00    test5   pass
45  26-08-2022 07:00    test6   pass
46  26-08-2022 07:00    test7   pass
47  26-08-2022 07:00    test8   pass
48  26-08-2022 07:00    test9   pass
49  26-08-2022 07:00    test10  pass

解决方案

方式1:从原始数据直接统计(推荐)

直接基于原始DataFrame分组统计每日失败次数,比修改已分组数据集更高效准确:

import pandas as pd

# 生成失败标记列:1代表fail,0代表pass
df['Count_of_Fail_tests'] = df['test_status'].map({'fail': 1, 'pass': 0})

# 按测试用例+日期分组,求和得到每日失败次数
daily_fail = df.groupby(['test_identifier', 'timestamp'], as_index=False)['Count_of_Fail_tests'].sum()

# 若需保留test_status列,合并回原数据
result = pd.merge(daily_fail, df[['test_identifier', 'timestamp', 'test_status']], on=['test_identifier', 'timestamp'])

方式2:在已分组数据集上实现去重显示

如果需要在现有分组数据集中,让Count_of_Fail_tests仅在测试失败的行显示(其余行留空),可以这样处理:

# 先重置多级索引为普通列
grouped_df = grouped_df.reset_index()

# 仅保留test_status为fail的行的Count值,其余设为空
grouped_df['Count_of_Fail_tests'] = grouped_df.apply(
    lambda row: row['Count_of_Fail_tests'] if row['test_status'] == 'fail' else '',
    axis=1
)

# 恢复原分组索引格式
grouped_df = grouped_df.set_index('test_identifier')

效果说明

  • 方式1能准确统计每个测试用例每日的失败次数,数据逻辑更严谨
  • 方式2可直接匹配你想要的输出格式,让Count值仅在失败行显示

内容的提问来源于stack exchange,提问作者newuser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 03:48:35