Python Pandas筛选R值>130的行并导出对应SN至新Excel的问题
问题解决:筛选R值大于130的SN数据并导出Excel
需求说明
用户有多组HIGH和LOW类型的Excel文件,需要用Python Pandas完成以下操作:
- 计算R值:
R = HIGH文件的KPIVALUE列值 - LOW文件的KPIVALUE列值 - 筛选出R值大于130的行
- 将这些行对应的SN列数据导出到新Excel文件
但当前编写的代码仅返回布尔值,无法获取目标单元格数据,原代码如下:
v=int(input("how many periods do you have:\n")) new_excel_by_user=str(input("write the name of your new EXCEL file:")) user_excel = pd.ExcelWriter(new_excel_by_user+'.xlsx', engine='xlsxwriter') sys_excel=pd.ExcelWriter('sys_excel132.xlsx', engine='xlsxwriter') final_excel=pd.ExcelWriter('final132.xlsx' , engine='xlsxwriter') merged_df_H = pd.DataFrame() merged_df_L = pd.DataFrame() final_merged=pd.DataFrame() for i in range(v): print("\npriod %d :"%(i+1)) excelpathH=''+input(''+r"Insert your Excel path(HIGH):") excelpathL=''+input(''+r"Insert your Excel path(LOW):") excelpathH=excelpathH.replace('"', '') excelpathL=excelpathL.replace('"', '') dfH=pd.read_excel(os.path.join(excelpathH), engine='openpyxl' ) dfL=pd.read_excel(os.path.join(excelpathL), engine='openpyxl' ) Rnh=dfH['KPIVALUE'] Rnl=dfL['KPIVALUE'] R=Rnh-Rnl merged_df_H['R%s'%(i+1)]=R R=merged_df_H['R%s'%(i+1)] #the below code returns true false only RESULT=merged_df_H['R%s'%(i+1)].ge(130) print(".....................................................................") merged_df_H = pd.concat([ merged_df_H,dfH,dfL,R,RESULT], axis=1 ) final_merged=pd.concat([final_merged,dfH['SN'], R,RESULT],axis=1)
问题分析
原代码的核心问题:
- 仅生成了布尔判断列
RESULT,但没有用这个条件去筛选对应的SN数据 - 数据拼接逻辑混乱,多次
concat导致数据结构冗余,无法直接提取有效数据
修正后的代码
import pandas as pd import os # 获取用户输入 v = int(input("请输入周期数:\n")) new_excel_name = input("请输入新Excel文件名:") + '.xlsx' # 初始化存储结果的DataFrame final_result = pd.DataFrame() for i in range(v): print(f"\n第{i+1}个周期:") # 读取文件路径并处理引号 excelpathH = input("请输入HIGH类型Excel文件路径:").replace('"', '') excelpathL = input("请输入LOW类型Excel文件路径:").replace('"', '') # 读取Excel文件 dfH = pd.read_excel(os.path.join(excelpathH), engine='openpyxl') dfL = pd.read_excel(os.path.join(excelpathL), engine='openpyxl') # 计算R值 dfH['R'] = dfH['KPIVALUE'] - dfL['KPIVALUE'] # 筛选R>130的行,提取SN和R值 filtered = dfH[dfH['R'] > 130][['SN', 'R']] # 添加周期标识,方便区分不同周期的数据 filtered['周期'] = i+1 # 将当前周期的筛选结果合并到最终结果中 final_result = pd.concat([final_result, filtered], ignore_index=True) # 将最终结果导出到Excel final_result.to_excel(new_excel_name, index=False, engine='openpyxl') print(f"已完成导出,文件名为: {new_excel_name}")
关键改动说明
- 直接在HIGH数据框中计算R值,避免冗余的数据存储
- 使用
dfH[dfH['R'] > 130]直接筛选符合条件的行,提取需要的SN和R值 - 添加周期标识,方便区分不同周期的筛选结果
- 最后统一导出所有符合条件的数据,结构清晰且符合需求
内容的提问来源于stack exchange,提问作者SOURA ELLE
相关产品推荐
相关产品推荐

