如何用Python提取Excel多CellName列交集并生成Result列
解决方案
假设你已经通过现有代码生成了包含多组CellName_*(如CellName_1、CellName_2)和对应R_*列的DataFrame,以下是实现需求的核心代码:
完整代码示例
import pandas as pd # --- 这里是你已有的读取文件、计算R值、生成CellName列的代码 --- # df = 你的最终DataFrame,包含CellName_1, R_1, CellName_2, R_2...等列 # 1. 提取所有CellName和对应的R列 cell_columns = [col for col in df.columns if col.startswith('CellName')] r_columns = [col for col in df.columns if col.startswith('R')] # 确保列配对正确(假设CellName和R的序号对应,如CellName_1对应R_1) column_pairs = list(zip(cell_columns, r_columns)) # 2. 转换为长格式数据,方便统一处理 temp_data = [] for cell_col, r_col in column_pairs: # 提取每组的CellName和R值,标记组别 group_data = df[[cell_col, r_col]].rename(columns={cell_col: 'CellName', r_col: 'R'}) group_data['Group'] = f'Group_{cell_col.split("_")[-1]}' temp_data.append(group_data) combined_data = pd.concat(temp_data, ignore_index=True) # 3. 筛选符合条件的CellName # 先过滤掉R值小于3的记录 filtered_data = combined_data[combined_data['R'] >= 3] # 统计每个CellName覆盖的组数,必须等于总组数才符合要求 total_groups = len(column_pairs) valid_cells = filtered_data.groupby('CellName').filter( lambda x: len(x) == total_groups )['CellName'].unique() # 4. 生成结果并导出 # 方式1:将结果添加到原DataFrame的Result列(所有行显示相同的有效CellName列表) df['Result'] = ', '.join(valid_cells) # 方式2:单独生成仅包含Result列的Excel文件 result_df = pd.DataFrame({'Result': valid_cells}) result_df.to_excel('筛选结果.xlsx', index=False) # 导出原DataFrame(如果需要保留原数据+Result列) df.to_excel('带结果的完整数据.xlsx', index=False)
关键步骤说明
- 列提取与配对:通过列名前缀批量识别CellName和R列,确保每组数据对应正确。
- 长格式转换:把分散的多组列合并成统一结构,便于后续分组统计。
- 双重筛选:先过滤掉R值不足3的记录,再筛选出在所有组都存在(即每组都满足R≥3)的CellName。
- 结果导出:提供两种导出方式,可根据需求选择保留原数据或仅导出筛选结果。
可选优化
如果CellName存在大小写不一致或多余空格的情况,可以在处理前统一格式:
# 在转换长格式时添加统一处理 group_data['CellName'] = group_data['CellName'].str.strip().str.lower()
内容的提问来源于stack exchange,提问作者SOURA ELLE
相关产品推荐
相关产品推荐

