如何用Python筛选Excel中首尾行Name不含FTTH的project_id
需求说明
我们有一个包含project_id、Name、Date三列的Excel文件,数据如下:
| project_id | Name | Date |
|---|---|---|
| 755 | Waber | 2019-04-08 |
| 755 | Wabern | 2020-06-16 |
| 755 | Wabern (FTTH geplan) | 2020-07-24 |
| 755 | Wabern FTTH DTAG | 2020-08-15 |
| 755 | Wabern (FTTH DTAG gg) | 2021-03-05 |
| 755 | Wabern | 2021-09-13 |
| 134 | Lerbeck | 2019-04-18 |
| 134 | BAd oyehausen (FttH svd) | 2020-06-26 |
| 134 | Werre Park | 2020-07-14 |
| 134 | Werre Park (FTTH ssd) | 2020-08-25 |
| 134 | Werre Park (FTTH) | 2021-03-15 |
| 134 | Bad oyehausen | 2021-09-23 |
| 584 | kitern | 2019-04-08 |
| 584 | Lausen (ftth los) | 2020-06-16 |
| 584 | kitener (FTTH geplan) | 2020-07-24 |
| 584 | Lausern | 2020-08-15 |
| 584 | Lausern (FTTH DTAG gg) | 2021-03-05 |
需要筛选出符合以下条件的project_id:同一project_id对应的首行和末行的Name字段中,均不包含任何大小写形式的FTTH(如FTTH、FttH、ftth等)。例如project_id 755符合条件(首行Name是Waber,末行是Wabern,都不含FTTH),而project_id 584不符合(末行Name包含FTTH)。
期望得到的结果如下:
| project_id |
|---|
| 755 |
| 134 |
Python实现方案
步骤说明
- 依赖准备:需要使用
pandas处理表格数据,openpyxl读取Excel文件,先安装依赖。 - 读取Excel文件,加载数据到DataFrame。
- 按
project_id分组,提取每组的首行和末行的Name字段。 - 检查这两个
Name是否都不包含任何大小写的FTTH(统一转小写后判断是否存在"ftth")。 - 筛选符合条件的
project_id,输出或保存结果。
代码实现
import pandas as pd # 替换为你的Excel文件路径 excel_path = "your_excel_file.xlsx" # 读取Excel数据 df = pd.read_excel(excel_path) # 按project_id分组,提取每组第一个和最后一个Name grouped_names = df.groupby("project_id")["Name"].agg(["first", "last"]) # 定义函数:判断字符串是否不包含任何大小写的FTTH def check_no_ftth(name): return "ftth" not in name.lower() # 筛选出首行和末行Name都不含FTTH的project_id valid_projects = grouped_names[ grouped_names["first"].apply(check_no_ftth) & grouped_names["last"].apply(check_no_ftth) ].reset_index() # 输出结果 print("符合条件的project_id:") print(valid_projects[["project_id"]]) # 可选:将结果保存到新的Excel文件 # valid_projects[["project_id"]].to_excel("valid_projects.xlsx", index=False)
代码解释
- 使用
groupby("project_id")["Name"].agg(["first", "last"])快速获取每组的首尾行Name,避免手动遍历分组。 - 通过
name.lower()将字符串转为小写,再判断是否包含"ftth",实现大小写不敏感的匹配。 - 用布尔索引筛选同时满足首尾行Name都不含FTTH的分组,最后提取
project_id得到结果。
内容的提问来源于stack exchange,提问作者Vicky
相关产品推荐
相关产品推荐

