如何从DataFrame现有列的子串提取内容并添加新列?
提取group_code并添加到DataFrame的实现方法
针对你的需求,这里提供两种实用的Pandas实现方式:
方法一:字符串拆分法
先将group_email按@拆分,取邮箱前缀部分;再将前缀按-拆分,提取第三个连字符后的子串(对应索引为3的元素,因为索引从0开始计数):
import pandas as pd # 构造初始DataFrame data = { 'email': ['drew@mail.com', 'nate@mail.com', 'chris@mail.com'], 'first_name': ['drew', 'nate', 'chris'], 'last_name': ['barry', 'lewis', 'ryan'], 'id': ['05', '03', '04'], 'group_email': [ 'san-red-gate-rate@mail.com', 'san-blue-gate-factor@mail.com', 'san-red-wheels-drive@mail.com' ] } df = pd.DataFrame(data) # 提取group_code df['group_code'] = df['group_email'].str.split('@').str[0].str.split('-').str[3]
方法二:正则表达式法
用正则匹配group_email中,前三个-分隔段之后、@之前的内容,直接捕获目标子串:
# 提取group_code df['group_code'] = df['group_email'].str.extract(r'^[^-]+-[^-]+-[^-]+-([^@]+)')
两种方法执行后,都会得到你需要的结果:
| first_name | last_name | id | group_email | group_code | |
|---|---|---|---|---|---|
| drew@mail.com | drew | barry | 05 | san-red-gate-rate@mail.com | rate |
| nate@mail.com | nate | lewis | 03 | san-blue-gate-factor@mail.com | factor |
| chris@mail.com | chris | ryan | 04 | san-red-wheels-drive@mail.com | drive |
内容的提问来源于stack exchange,提问作者unnest_me
相关产品推荐
相关产品推荐

