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

如何根据DataFrame列中字符串末尾3字符生成指定值新列?

如何给Pandas DataFrame新增type列并按name后缀匹配赋值?

嘿,我来分享几个用Pandas实现这个需求的实用方法,都很容易上手,你可以根据自己的场景选择:

方法一:用str.endswith() + numpy.where()(最直接高效)

这个方法是处理这类后缀匹配的首选,利用Pandas的字符串方法和numpy的向量化判断,速度很快:

import pandas as pd
import numpy as np

# 先构造你的示例DataFrame
df = pd.DataFrame({
    'name': ['Carlos - xyz', 'Marcos - yws', 'Fran - xxz', 'Matt - yre'],
    'year': [2019, 2031, 2431, 1985]
})

# 新增type列:匹配后缀为xyz或xxz的行赋值'big',其余为空
df['type'] = np.where(df['name'].str.endswith(('xyz', 'xxz')), 'big', '')

解释:

  • df['name'].str.endswith(('xyz', 'xxz')):返回一个布尔Series,标记每行的name是否以xyz或xxz结尾
  • np.where(条件, 满足条件的值, 不满足条件的值):向量化的三元判断,把布尔结果转换成我们需要的big或空字符串

方法二:用str.contains() + 正则表达式(灵活扩展)

如果之后需要匹配更多复杂的后缀规则,用正则表达式会更灵活:

df['type'] = np.where(df['name'].str.contains(r'(xyz|xxz)$'), 'big', '')

解释:

  • 正则表达式(xyz|xxz)$里,$表示匹配字符串的末尾,(xyz|xxz)表示匹配其中任意一个后缀
  • 这种方法适合后续需要调整匹配规则的场景,比如要匹配xz结尾的所有字符串,只需要修改正则即可

方法三:用apply()自定义函数(可读性强)

如果你的后缀提取逻辑更复杂(比如name的分隔符不固定),可以写个小函数来处理每行数据:

def get_type_from_name(name_str):
    # 拆分name字符串,取出最后的后缀部分
    suffix = name_str.split(' - ')[-1]
    # 判断后缀是否在目标列表里
    return 'big' if suffix in ['xyz', 'xxz'] else ''

# 对name列应用这个函数,生成type列
df['type'] = df['name'].apply(get_type_from_name)

解释:

  • apply()会遍历name列的每个元素,把值传入自定义函数处理
  • 这种方法代码可读性很高,适合逻辑复杂、需要分步处理的场景

不管用哪种方法,最终运行后你都会得到想要的结果:

name  year type
0  Carlos - xyz  2019  big
1  Marcos - yws  2031     
2    Fran - xxz  2431  big
3    Matt - yre  1985     

内容的提问来源于stack exchange,提问作者aabujamra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:23:03