如何在DataFrame列中按字符串位置匹配子串并生成评级列
解决DataFrame中根据ID子串生成评级列的问题
嘿,你抓准问题点啦!str.get(n)确实只能提取单个字符,要获取连续的3位子串,咱们可以用Pandas的字符串切片功能,两种写法都能搞定:直接用Python风格的str[start:end],或者更直观的str.slice()方法。
修正后的完整代码
import pandas as pd import numpy as np # 假设你的df已经准备好 # 提取ID的第6、7、8位(注意Python是0索引,对应位置5到8,左闭右开) id_segment = df['id'].str[5:8] # 修正条件判断,现在匹配的是完整的3位子串 conditions = [ (id_segment == 'A00'), (id_segment == 'AA0'), (id_segment == '000') ] values = ['A', 'AA', 'AAA'] # 生成Rating列,建议加default处理未匹配的情况 df['Rating'] = np.select(conditions, values, default=np.nan) df['Rating'] = df['Rating'].astype('category')
核心细节解释
- 切片逻辑:9位ID的第6位对应索引5,第8位对应索引7,Python切片是左闭右开规则,所以
str[5:8]会取到索引5、6、7的字符,正好是你要的3位子串。 - 可选写法:如果觉得
[5:8]不够直观,也可以用str.slice(start=5, stop=8),效果完全一样:id_segment = df['id'].str.slice(start=5, stop=8) - 小优化:加个
default=np.nan很实用,万一有ID不匹配这三个模式,不会默认生成0值,而是用缺失值标记,后续处理更方便。
这样调整后,你的代码就能正确生成对应的评级列啦!
内容的提问来源于stack exchange,提问作者user356
相关产品推荐
相关产品推荐

