在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。
预期结果如下:
| Type | Fcol | Tcol |
|---|---|---|
| 9F,5F/6F,3T,1T | 9F,5F/6F | 3T,1T |
| 18F/19F,2F,9T,4T | 18F/19F,2F | 9T,4T |
| 17F/12F | 17F/12F | Absent |
| 3T | Absent | 3T |
| 3T,2F/3F | 2F/3F | 3T |
| No Types | No Types | No 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逐行处理数据:- 优先判断
Type是否为No Types,是则直接返回对应结果; - 将
Type按逗号分割为单个项; - 分别筛选出以F、T结尾的项;
- 将筛选后的项用逗号拼接,若无对应项则填充
Absent;
- 优先判断
- 通过
apply方法将函数应用到每一行,生成新的两列。
内容的提问来源于stack exchange,提问作者Scope
相关产品推荐
相关产品推荐

