如何拆分DataFrame单列为多列并为新增列添加标记
解决Pandas中按大写字母拆分字符串并添加标记列的问题
你需要把Value列中以大写字母开头+数字组成的片段拆分出来,展开为多列后再给每列添加固定标记列。下面是具体实现方案:
步骤1:拆分字符串并展开为多列
利用正则表达式的正向预查(?=[A-Z]),可以在每个大写字母前分割字符串,这样就能完整保留每个片段(因为正向预查不会消耗匹配的字符)。用Pandas的str.split方法拆分后,将结果转为DataFrame并与原数据合并:
import pandas as pd # 构造原始数据 df = pd.DataFrame({ 'Value': ['X1A14', 'X20P79', 'A50B7P60', 'G24C5C6B8'] }) # 按大写字母前的位置拆分,expand=True直接展开为多列 split_df = df['Value'].str.split(r'(?=[A-Z])', expand=True) # 去掉第一列的空值(第一个字符是大写字母,拆分后第一行会是空) split_df = split_df.drop(0, axis=1) # 给拆分后的列命名为A、B、C、D split_df.columns = ['A', 'B', 'C', 'D'] # 和原数据合并 result = pd.concat([df, split_df], axis=1)
这一步会得到你需要的中间结果:
Value A B C D 0 X1A14 X1 A14 NaN NaN 1 X20P79 X20 P79 NaN NaN 2 A50B7P60 A50 B7 P60 NaN 3 G24C5C6B8 G24 C5 C6 B8
步骤2:添加标记列并调整列顺序
直接给结果添加mark列,每个mark列对应固定的标记,然后调整列的顺序让数据列和标记列相邻:
# 添加标记列 result['mark1'] = 'A' result['mark2'] = 'B' result['mark3'] = 'C' result['mark4'] = 'D' # 调整列顺序,按Value、A、mark1、B、mark2、C、mark3、D、mark4排列 new_order = ['Value', 'A', 'mark1', 'B', 'mark2', 'C', 'mark3', 'D', 'mark4'] result = result[new_order] # 把NaN替换为空字符串(和你要的结果格式对齐) result = result.fillna('')
运行后就能得到最终的目标结果:
Value A mark1 B mark2 C mark3 D mark4 0 X1A14 X1 A A14 B C D 1 X20P79 X20 A P79 B C D 2 A50B7P60 A50 A B7 B P60 C D 3 G24C5C6B8 G24 A C5 B C6 C B8 D
关键说明
- 正则
(?=[A-Z])是正向预查,匹配“后面跟着大写字母”的位置,拆分时不会破坏原有的片段结构。 - 如果后续出现超过4个片段的情况,只需调整拆分后的列名和标记列数量即可适配。
内容的提问来源于stack exchange,提问作者jasondesu
相关产品推荐
相关产品推荐

