如何更高效筛选不含A/A,U的DataFrame分组并导出Excel
优化方案:筛选无"A"/"A,U"的分组
原数据结构
| Name | Group1 | Group2 | Group3 | Group4 | Group5 | Group6 |
|---|---|---|---|---|---|---|
| AppUser | A | |||||
| ShareUser | A | A | A,U | |||
| MediaUser | A | |||||
| WebUser | ||||||
| PrintUser | A,U | A | A,U |
需求回顾
找出所有**未包含"A"或"A,U"**的分组列,将结果保存到Excel文件中。
现有代码思路分析
现有代码通过将"A,U"替换为"A"来统一判断标准,再筛选全列不等于"A"的分组,逻辑可行但可以简化流程,避免额外的替换操作。
优化后的简洁实现
import pandas as pd from pathlib import Path # 读取源文件,同时设置Name列为索引 file_path = Path.cwd() / "./UserGrid.xlsx" df = pd.read_excel(file_path, index_col="Name") # 筛选:找出所有列中完全不存在"A"和"A,U"的分组 no_admin_groups = df.columns[~df.isin(["A", "A,U"]).any()].tolist() # 生成结果DataFrame并保存到Excel result_df = pd.DataFrame(no_admin_groups, columns=["No Admins"]) with pd.ExcelWriter("./No_Admins.xlsx", engine="xlsxwriter") as writer: result_df.to_excel(writer, sheet_name="NoAdmins", index=False) # 设置目标列宽度 writer.sheets["NoAdmins"].set_column(0, 0, 50)
优化点说明
- 读取时直接设置索引:用
index_col="Name"参数一步完成索引设置,省去单独调用set_index的步骤 - 直接匹配目标值:通过
isin(["A", "A,U"])直接判断单元格是否为目标值,any()检查列内是否存在目标值,取反后得到完全无目标值的列 - 上下文管理器自动管理资源:
with语句自动处理ExcelWriter的关闭操作,无需手动调用close(),代码更简洁安全
内容的提问来源于stack exchange,提问作者Dinerz
相关产品推荐
相关产品推荐

