如何使用Pandas DataFrame按规则计算测试用例剩余计数
测试用例剩余量计算问题解决
需求说明
基于给定的Pandas DataFrame计算测试用例剩余数量,规则如下:
- 第一行:用测试用例总数(示例为80)减去该行的Count值
- 后续每行:用上一行的计算结果减去当前行的Count值
输入数据
| Date | Count |
|---|---|
| 17-10-2022 | 20 |
| 18-10-2022 | 18 |
| 19-10-2022 | 15 |
| 20-10-2022 | 10 |
| 21-10-2022 | 5 |
现有代码
import pandas as pd df['Date'] = pd.to_datetime(df['Date']) edate = df['Date'].max().strftime('%Y-%m-%d') sdate = df['Date'].min().strftime('%Y-%m-%d') df['Date'] = pd.to_datetime(df['Date']).apply(lambda x: x.date()) df=df.groupby(['Date'])['Date'].count().reset_index(name='count') df['result'] = Test_case - df['count'].iloc[0] df['result'] = df['result'] - df['count'].shift(1)
当前输出
| Date | count | result |
|---|---|---|
| 2022-10-17 | 20 | NaN |
| 2022-10-18 | 18 | 40.0 |
期望输出
| Date | Count | Result |
|---|---|---|
| 17-10-2022 | 20 | 60(80-20) (80为测试用例总数示例) |
| 18-10-2022 | 18 | 42(60-18) |
| 19-10-2022 | 15 | 27(42-15) |
| 20-10-2022 | 10 | 17(27-10) |
| 21-10-2022 | 5 | 12(17-5) |
修正后的代码
import pandas as pd # 定义测试用例总数 TEST_CASE_TOTAL = 80 # 构造输入DataFrame(实际使用时可替换为读取数据源) data = { 'Date': ['17-10-2022', '18-10-2022', '19-10-2022', '20-10-2022', '21-10-2022'], 'Count': [20, 18, 15, 10, 5] } df = pd.DataFrame(data) # 保留原日期格式显示 df['Date'] = pd.to_datetime(df['Date'], format='%d-%m-%Y').dt.strftime('%d-%m-%Y') # 计算剩余测试用例数值 remaining = [TEST_CASE_TOTAL - df['Count'].iloc[0]] for idx in range(1, len(df)): remaining.append(remaining[idx-1] - df['Count'].iloc[idx]) df['Remaining_Value'] = remaining # 生成带计算说明的Result列 df['Result'] = df.apply( lambda row: f"{row['Remaining_Value']}({row['Remaining_Value'] + row['Count']}-{row['Count']})", axis=1 ) # 为第一行添加总数说明 df.loc[0, 'Result'] += ' (80为测试用例总数示例)' # 调整列顺序并输出结果 final_df = df[['Date', 'Count', 'Result']] print(final_df)
代码说明
- 日期格式处理:转换日期时保留原
dd-mm-yyyy格式,避免输出为标准ISO日期格式 - 剩余量计算:通过循环逐行计算,严格遵循需求规则,确保第一行用总数减当日Count,后续行用上一行剩余值减当日Count
- Result列生成:拼接剩余数值与计算逻辑说明,第一行额外标注测试用例总数示例
- 列顺序调整:匹配期望输出的列排列顺序
内容的提问来源于stack exchange,提问作者Pranav
相关产品推荐
相关产品推荐

