You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 14:17:44