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

按指定下划线范围拆分DataFrame列并生成新列

按指定下划线位置拆分DataFrame指定行并生成新列

原始数据构造

先还原你的初始DataFrame:

import pandas as pd

data = {
    'Type': ['Parent', 'Child', 'Subchild'],
    'Name': [
        'ABC_US_Test_en-us',
        'ABC_12252020_US_Test_Natl_en-us_Home-vs-Away',
        'break1'
    ]
}
df = pd.DataFrame(data)

解决方案代码

通过条件筛选+字符串分割+索引提取实现需求,避免逐行遍历的低效:

# 筛选需要处理的行(Type为Child)
mask = df['Type'] == 'Child'

# 提取第2至第6个下划线之间的内容(对应分割后列表的索引2-5,用下划线拼接)
df.loc[mask, 'New_Type'] = df.loc[mask, 'Name'].str.split('_').apply(
    lambda x: '_'.join(x[2:6]) if len(x) >= 6 else None
)

# 提取第6个下划线之后的内容(对应分割后列表的索引6)
df.loc[mask, 'Matchup'] = df.loc[mask, 'Name'].str.split('_').apply(
    lambda x: x[6] if len(x) >= 7 else None
)

输出结果

执行后得到的DataFrame如下:

Type                                            Name            New_Type       Matchup
0      Parent                               ABC_US_Test_en-us                 NaN          NaN
1       Child  ABC_12252020_US_Test_Natl_en-us_Home-vs-Away  US_Test_Natl_en-us  Home-vs-Away
2  Subchild                                          break1                 NaN          NaN

代码说明

  1. mask变量精准定位需要处理的行,避免对所有行做无效操作
  2. str.split('_')将Name列的字符串按下划线分割为列表,例如Child行的Name分割后为:
    ['ABC', '12252020', 'US', 'Test', 'Natl', 'en-us', 'Home-vs-Away']
  3. 用lambda函数判断列表长度,防止因字符串格式不符导致索引越界报错
  4. 非Child行的新列自动填充NaN,符合你的输出要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:43:01