如何用Python筛选含HTTP首次出现的名称变更及对应ID、日期
Python实现Excel记录筛选需求
需求说明
从包含id、name、Date三列的Excel文件中,筛选出同一id下首条记录不含任意大小写形式的HTTP,且取该id下首次出现HTTP的那条记录。例如id:436首条无HTTP,第二条首次出现HTTP,符合筛选条件;id:145首条就有HTTP,不符合。
实现步骤
- 安装依赖库
- 读取Excel数据并标记含HTTP的记录
- 按id分组筛选符合条件的记录
- 输出或保存结果
代码实现
首先安装所需依赖:
pip install pandas openpyxl
然后运行以下代码(替换文件路径为你的实际路径):
import pandas as pd # 读取Excel文件,替换为你的文件路径 df = pd.read_excel("your_input_file.xlsx", engine="openpyxl") # 标记每条记录是否包含任意大小写的HTTP df["has_http"] = df["name"].str.contains(r'http', case=False, regex=True) # 定义分组筛选逻辑 def process_group(group): # 检查当前id的第一条记录是否不含HTTP if not group.iloc[0]["has_http"]: # 提取该id下首次出现HTTP的记录 first_http_record = group[group["has_http"]].iloc[0] return first_http_record # 首条就有HTTP的id直接跳过 return None # 应用分组筛选并整理结果 filtered_data = df.groupby("id").apply(process_group).dropna().reset_index(drop=True) # 保留需要的列,移除辅助列 final_result = filtered_data[["id", "name", "Date"]] # 打印结果 print(final_result) # 保存结果到新Excel文件 final_result.to_excel("filtered_output.xlsx", index=False, engine="openpyxl")
代码说明
str.contains(r'http', case=False):通过不区分大小写的正则匹配,识别所有包含HTTP、http、HttP等形式的记录- 分组处理时,先验证id的首条记录是否无HTTP,再提取该id下第一个含HTTP的记录
- 最后移除辅助列,输出或保存筛选后的结果
内容的提问来源于stack exchange,提问作者Vicky
相关产品推荐
相关产品推荐

