如何使用str.contains、str.find与df.loc从DataFrame列提取指定字符
Pandas 槽位号提取需求实现方案
实现逻辑说明
- 分支1:
id列包含(Slot字符串时,提取匹配位置开始的7个字符,删除首字符(得到槽位号 - 分支2:
id列包含PR GRP字符串时,取grp列第6位开始的连续6个字符作为槽位号
完整实现代码
import pandas as pd # 构造示例数据 data = { "id": ["Alpha-old-1_MOD (Slot01)", "Alpha-old-1_PR GRP1", "Beta-new-1_PR GRP2", "Beta-old-1_MOD (Slot03)"], "grp": ["-", "MOD (Slot07);MOD (Slot08)", "MOD (Slot13);MOD (Slot14)", "-"] } df = pd.DataFrame(data) # 批量计算Output列 # 提取(Slot开头的7个字符,去除首字符( slot_extract = df["id"].str.extract(r"(\(Slot.{3})", expand=False).str[1:] # 提取grp列第6位(Python索引从0开始,对应索引为5)开始的6个字符 grp_extract = df["grp"].str[5:11] # 根据id的匹配条件赋值 df["Output"] = pd.NA df.loc[df["id"].str.contains("\(Slot"), "Output"] = slot_extract df.loc[df["id"].str.contains("PR GRP"), "Output"] = grp_extract print(df)
输出结果验证
运行代码后得到的Output列和示例要求完全一致:
| id | grp | Output |
|---|---|---|
| Alpha-old-1_MOD (Slot01) | - | Slot01 |
| Alpha-old-1_PR GRP1 | MOD (Slot07);MOD (Slot08) | Slot07 |
| Beta-new-1_PR GRP2 | MOD (Slot13);MOD (Slot14) | Slot13 |
| Beta-old-1_MOD (Slot03) | - | Slot03 |
内容的提问来源于stack exchange,提问作者Asghar Attari
相关产品推荐
相关产品推荐

