按指定下划线范围拆分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
代码说明
mask变量精准定位需要处理的行,避免对所有行做无效操作str.split('_')将Name列的字符串按下划线分割为列表,例如Child行的Name分割后为:['ABC', '12252020', 'US', 'Test', 'Natl', 'en-us', 'Home-vs-Away']- 用
lambda函数判断列表长度,防止因字符串格式不符导致索引越界报错 - 非Child行的新列自动填充
NaN,符合你的输出要求
内容的提问来源于stack exchange,提问作者user53526356
相关产品推荐
相关产品推荐

