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

在Pandas中按规则将字符串列拆分为两个新列

问题描述

现有一个DataFrame df,结构如下:

Type
9F,5F/6F,3T,1T
18F/19F,2F,9T,4T
17F/12F
3T
3T,2F/3F
No Types

需要基于Type列生成两个新列:

  • 将所有以F结尾的项归入Fcol,以T结尾的项归入Tcol;
  • 若Type值为No Types,则两列均填充No Types;
  • 无对应项时填充Absent。

预期结果如下:

TypeFcolTcol
9F,5F/6F,3T,1T9F,5F/6F3T,1T
18F/19F,2F,9T,4T18F/19F,2F9T,4T
17F/12F17F/12FAbsent
3TAbsent3T
3T,2F/3F2F/3F3T
No TypesNo TypesNo Types
解决方案

可以用Pandas的自定义函数结合apply方法实现需求,代码如下:

import pandas as pd

def split_types(row):
    type_val = row['Type']
    if type_val == 'No Types':
        return pd.Series(['No Types', 'No Types'])
    items = type_val.split(',')
    f_items = [item for item in items if item.endswith('F')]
    t_items = [item for item in items if item.endswith('T')]
    f_col = ','.join(f_items) if f_items else 'Absent'
    t_col = ','.join(t_items) if t_items else 'Absent'
    return pd.Series([f_col, t_col])

# 对目标DataFrame执行处理
df[['Fcol', 'Tcol']] = df.apply(split_types, axis=1)

代码说明

  • 自定义函数split_types逐行处理数据:
    1. 优先判断Type是否为No Types,是则直接返回对应结果;
    2. 将Type按逗号分割为单个项;
    3. 分别筛选出以F、T结尾的项;
    4. 将筛选后的项用逗号拼接,若无对应项则填充Absent;
  • 通过apply方法将函数应用到每一行,生成新的两列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:45:46