如何将Pandas groupby分组结果拆分为pass、fail两独立列?
解决方法
你得到的多级索引Series只要做一层轴向转换即可匹配目标宽表格式,两种实现方案如下:
方案1:基于现有groupby逻辑修改
在你原有分组计数的代码后加unstack操作即可:
# 分组计数后转宽表,无对应统计值的位置自动填充0 count_df = df.groupby(['Channel', 'Flag']).size().unstack(fill_value=0) # 适配你现有绘图代码的大写列名要求,重命名列 count_df = count_df.rename(columns={"pass": "Pass", "fail": "Fail"}) # 如果需要将Channel从索引转为普通列,增加下面一行 count_df = count_df.reset_index()
方案2:直接用交叉表一步生成
用pd.crosstab可以更简洁的实现分组计数+转宽表的逻辑:
count_df = pd.crosstab(df["Channel"], df["Flag"]) # 后续重命名、重置索引的操作和方案1一致 count_df = count_df.rename(columns={"pass": "Pass", "fail": "Fail"}).reset_index()
注意事项
- 如果你的绘图代码默认将Channel作为索引取值,不需要转为普通列的话,跳过
reset_index()步骤即可 fill_value=0参数可以覆盖部分Channel无pass/fail记录的场景,避免统计结果出现空值报错
内容的提问来源于stack exchange,提问作者Marc-Olivier Duceppe
相关产品推荐
相关产品推荐

