Python中基于DataFrame现有字符串列按规则生成新列的方法
pandas实现Termcode列匹配赋值方案
核心逻辑
按需求拆分判断规则即可:
- 先固定4个学期关键词:
summer/spring/fall/winter - 空值(含NaN、空字符串)直接赋值
none - 统计每行Term字段命中的关键词数量:命中1个则返回对应学期名,命中2个及以上返回
multiple
完整可运行代码
import pandas as pd import numpy as np # 构造初始DataFrame df = pd.DataFrame({ 'School': ['A', 'B', 'A', 'F', 'C', 'E'], 'Term': ['summer 2020', 'spring 21', 'summer/spring', 'wintersem', 'fall trimester', np.nan], 'Students': [324, 101, 201, 44, 98, 23] }) # 定义学期关键词 term_keywords = ['summer', 'spring', 'fall', 'winter'] def match_termcode(term_val): # 空值判断 if pd.isna(term_val) or str(term_val).strip() == '': return 'none' term_str = str(term_val).lower() # 统计命中的关键词 hit = [kw for kw in term_keywords if kw in term_str] if len(hit) == 1: return hit[0] elif len(hit) >=2: return 'multiple' # 无任何关键词匹配的场景默认返回none,可按需调整 return 'none' # 生成新列 df['Termcode'] = df['Term'].apply(match_termcode)
运行结果
执行代码后得到的DataFrame和预期结构完全一致:
| School | Term | Students | Termcode |
|---|---|---|---|
| A | summer 2020 | 324 | summer |
| B | spring 21 | 101 | spring |
| A | summer/spring | 201 | multiple |
| F | wintersem | 44 | winter |
| C | fall trimester | 98 | fall |
| E | (空值) | 23 | none |
代码默认做了小写转换,可直接兼容Term字段大小写不统一的场景。
内容的提问来源于stack exchange,提问作者Nibbles
相关产品推荐
相关产品推荐

