20240101星期一:
2024年第一天,新的一年,新的开始,newstart;
Pandas中Series和DataFrame的两种数据类型中都有nunique()和unique()方法。这两个方法作用很简单,都是求Series或Pandas中的不同值。而unique()方法返回的是去重之后的不同值,而nunique()方法则直接放回不同值的个数。
如果Series或DataFrame中没有None值,则unique()方法返回的序列数据的长度等于nunique()方法的返回值(如上述代码中所展示的)。则当Series或DataFrame中有None值时,这两个就不一定相等了。具体如下:
# 知识点:unique,nunique:
# Pandas DataFrame.nunique(~) 方法计算 DataFrame 中每行或每列的唯一值的数量。
# Pandas中Series和DataFrame的两种数据类型中都有nunique()和unique()方法。
# 这两个方法作用很简单,都是求Series或Pandas中的不同值。
# 而unique()方法返回的是去重之后的不同值,
# 而nunique()方法则直接返回不同值的个数。
# 携带参数:
# axis默认是0,每列的唯一值的数量
# dropna默认是True,忽略NaN值
import pandas as pd
data = pd.read_excel('./baseDataForPd.xlsx',sheet_name='Sheet1')
# print(type(data),'\n',data) # <class 'pandas.core.frame.DataFrame'>
listA = []
for groupname,groupdata in data.groupby(['任务号','测试阶段','测试集']):
dictI={
"任务号":groupname[0],
"测试阶段":groupname[1],
"测试集":groupname[2],
"案例数":groupdata.shape[0],
"已执行":groupdata[groupdata["执行状态"].isin(["pass","fail"])].shape[0],
"未执行":groupdata[groupdata["执行状态"]=="unexecute"].shape[0],
"未评审":groupdata[groupdata["评审状态"]!="已评审"].shape[0],
# nunique()方法则直接返回不同值的个数
"执行状态个数":groupdata["执行状态"].nunique(),
# unique()方法返回的是去重之后的不同值
"执行状态去重后的数据":groupdata["执行状态"].unique().tolist()
}
listA.append(dictI)
for i in listA:
print(i)
{'任务号': 69499, '测试阶段': '应用组装', '测试集': '统一应用\\善营贷', '案例数': 5, '已执行': 1, '未执行': 4, '未评审': 4, '执行状态个数': 2, '执行状态去重后的数据': ['unexecute', 'fail']}
{'任务号': 69499, '测试阶段': '应用组装', '测试集': '统一应用\\抵押快贷', '案例数': 5, '已执行': 3, '未执行': 2, '未评审': 0, '执行状态个数': 2, '执行状态去重后的数据': ['pass', 'unexecute']}
{'任务号': 69499, '测试阶段': '用户接受', '测试集': '统一应用\\善营贷', '案例数': 6, '已执行': 2, '未执行': 4, '未评审': 1, '执行状态个数': 2, '执行状态去重后的数据': ['unexecute', 'fail']}
{'任务号': 69499, '测试阶段': '用户接受', '测试集': '统一应用\\抵押快贷', '案例数': 5, '已执行': 3, '未执行': 2, '未评审': 3, '执行状态个数': 2, '执行状态去重后的数据': ['pass', 'unexecute']}
{'任务号': 71260, '测试阶段': '应用组装', '测试集': '惠懂你\\优化大屏', '案例数': 12, '已执行': 5, '未执行': 7, '未评审': 6, '执行状态个数': 3, '执行状态去重后的数据': ['unexecute', 'fail', 'pass']}
{'任务号': 71260, '测试阶段': '应用组装', '测试集': '惠懂你\\惠助你', '案例数': 8, '已执行': 3, '未执行': 5, '未评审': 4, '执行状态个数': 2, '执行状态去重后的数据': ['pass', 'unexecute']}
{'任务号': 71260, '测试阶段': '用户接受', '测试集': '惠懂你\\优化大屏', '案例数': 13, '已执行': 4, '未执行': 9, '未评审': 6, '执行状态个数': 2, '执行状态去重后的数据': ['unexecute', 'pass']}
{'任务号': 71260, '测试阶段': '用户接受', '测试集': '惠懂你\\惠助你', '案例数': 5, '已执行': 4, '未执行': 1, '未评审': 0, '执行状态个数': 3, '执行状态去重后的数据': ['fail', 'pass', 'unexecute']}