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

使用Pytest结合Pandas DataFrame实现特定列的自定义断言测试

Pandas DataFrame的Pytest断言实现方案

针对你提出的三个断言需求,以下是基于Pandas的通用实现方法,避免逐元素检查:

断言1:同一ID对应的所有decision值一致

通过分组统计每个ID的decision唯一值数量,确保所有ID的唯一值数量均为1:

# 验证同一ID的decision无重复值
id_decision_unique_counts = result_df.groupby('ID')['decision'].nunique()
assert all(id_decision_unique_counts == 1), "存在同一ID对应多种decision值的异常"

断言2:不同ID对应的decision值互不相同

通过对比ID和decision的唯一值数量,确保两者数量一致(每个ID对应唯一的decision):

# 验证不同ID的decision无重复
assert result_df['decision'].nunique() == result_df['ID'].nunique(), "存在不同ID共享同一decision值的异常"

断言3:指定ID的decision值符合预期

利用Pandas官方的pd.testing.assert_frame_equal方法,构造预期结果的小DataFrame后与实际结果对比,避免逐元素判断:

import pandas as pd

# 构造指定ID的预期结果
expected = pd.DataFrame({
    'ID': ['00001', '00002'],
    'decision': ['plus', 'minus']
})

# 从结果中筛选指定ID的行并统一排序(避免顺序差异导致断言失败)
actual = result_df[result_df['ID'].isin(expected['ID'])].sort_values('ID').reset_index(drop=True)
expected_sorted = expected.sort_values('ID').reset_index(drop=True)

# 执行断言
pd.testing.assert_frame_equal(actual, expected_sorted, check_dtype=False)

注:check_dtype=False可根据实际需求调整,如果需要严格匹配数据类型可移除该参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:37:00