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

如何基于DataFrame中3列的片段信息创建新列?

解决DataFrame创建复合新列的问题

我来帮你搞定这个需求!咱们先把你的要求再明确拆解一下,确保每一步都覆盖到:

  • 姓氏处理:先去掉所有非字母字符,处理后如果长度≥5就取前5个字符,不够的话直接用处理后的完整姓氏
  • 名字部分:直接取前2个字符
  • 最后把上面两部分和指定的代码拼接起来,形成新列

实现步骤(附代码示例)

假设你的DataFrame有last_name(姓氏)、first_name(名字)、code(要追加的代码)这三列,咱们用Pandas的字符串方法来高效实现,比用apply更快哦:

import pandas as pd

# 先构造一个示例DataFrame,模拟你的数据
data = {
    'last_name': ['O\'Connor', 'Smith123', 'VanDerSar', 'Lee', 'McDonald-Jones'],
    'first_name': ['John', 'Emily', 'Peter', 'Amy', 'Michael'],
    'code': ['X1', 'Y2', 'Z3', 'A4', 'B5']
}
df = pd.DataFrame(data)

# 创建新列,按要求拼接
df['combined_col'] = (
    # 处理姓氏:去掉非字母字符,再取前5位(长度不足5自动取全部)
    df['last_name'].str.replace(r'[^a-zA-Z]', '', regex=True).str[:5]
    # 拼接名字前2位
    + df['first_name'].str[:2]
    # 拼接代码
    + df['code']
)

print(df)

代码解释

  1. 姓氏处理:str.replace(r'[^a-zA-Z]', '', regex=True) 用正则匹配所有非字母字符,替换为空;str[:5] 自动适配长度——如果处理后的姓氏长度≥5就取前5位,不够的话直接返回完整字符串,完美符合你的要求。
  2. 名字截取:str[:2] 直接提取名字的前2个字符,简单高效。
  3. 拼接组合:用+把三部分字符串直接拼接,生成最终的新列。

运行结果

上面的示例代码会输出这样的结果:

last_name first_name code combined_col
0        O'Connor        John   X1      CONNOJOX1
1         Smith123       Emily   Y2      SMITHEMY2
2       VanDerSar       Peter   Z3      VANDEPEZ3
3             Lee         Amy   A4      LEEAMY4
4  McDonald-Jones     Michael   B5      MCDONMIB5

你可以把示例里的列名换成你实际的列名,直接套用就可以啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:38:00