使用Pandas统计多列Excel数据的填充/未填充单元格数量
问题解决:Excel填充状态统计
原始数据
我有一份处理后的Excel数据,规则为:1代表已填充单元格,0代表未填充单元格,具体数据如下:
| 列A | 列B | 列C | 列D |
|---|---|---|---|
| 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 0 | 1 | 0 |
期望汇总结果
需要得到按列统计的已填充/未填充数量:
| 已填充 | 未填充 | |
|---|---|---|
| 列A | 2 | 2 |
| 列B | 1 | 3 |
| 列C | 4 | 0 |
| 列D | 0 | 4 |
原代码问题
你尝试的代码存在核心逻辑错误:
- 错误使用
groupby对所有列分组,这是按行的组合进行聚合,并非我们需要的按列统计 pd.NamedAgg的column参数不能传入多列列表,语法不符合Pandas规范
正确实现代码
假设你的DataFrame变量名为df2,可以用两种简洁方式实现:
方式一:直接构造统计结果
# 直接对每列统计已填充(1的总和)和未填充(0的总和) summary_new = pd.DataFrame({ '已填充': df2.sum(), '未填充': df2.eq(0).sum() }).reset_index().rename(columns={'index': ''})
方式二:使用agg批量统计
# 用agg批量应用统计函数,转置后调整格式 summary_new = df2.agg([ ('已填充', lambda x: x.eq(1).sum()), ('未填充', lambda x: x.eq(0).sum()) ]).T.reset_index().rename(columns={'index': ''})
代码说明
df2.sum():直接计算每列中1的总数(1代表已填充,求和即对应数量)df2.eq(0).sum():筛选出值为0的单元格后求和,得到未填充数量reset_index()+rename:将原列名转为表格第一列,匹配期望的输出格式
内容的提问来源于stack exchange,提问作者TonnyM
相关产品推荐
相关产品推荐

