如何基于Pandas DataFrame的Req_ID列按SRS拆分并复制行?
Pandas按SRS标识拆分Req_ID列并复制行的实现方案
原始数据
import pandas as pd data = {'Test_Step_ID': ['9.1.1', '9.1.2', '9.1.3', '9.1.4'], 'Protocol_Name': ['A', 'B', 'C', 'D'], 'Req_ID': ['SRS_0081d', 'SRS_0079', 'SRS_0082SRS_0082a', 'SRS_0015SRS_0015cSRS_0015d'] } df = pd.DataFrame(data)
需求说明
将Req_ID列中连续拼接的SRS标识拆分,每个SRS值单独占一行,其他列(Test_Step_ID、Protocol_Name)的数值保持与原行一致。
实现方案
利用正则表达式拆分Req_ID为SRS子串列表,再通过explode方法展开列表生成多行:
import re import pandas as pd # 原始数据初始化 data = {'Test_Step_ID': ['9.1.1', '9.1.2', '9.1.3', '9.1.4'], 'Protocol_Name': ['A', 'B', 'C', 'D'], 'Req_ID': ['SRS_0081d', 'SRS_0079', 'SRS_0082SRS_0082a', 'SRS_0015SRS_0015cSRS_0015d'] } df = pd.DataFrame(data) # 拆分Req_ID为SRS子串列表 df['Req_ID'] = df['Req_ID'].apply(lambda x: re.findall(r'SRS_\w+', x)) # 展开列表生成多行,重置索引 result_df = df.explode('Req_ID', ignore_index=True) # 输出结果 print(result_df)
代码解释
- 正则拆分:
re.findall(r'SRS_\w+', x)匹配所有以SRS_开头、后续包含字母/数字/下划线的子串,将连续拼接的SRS标识拆分为列表。 - 展开行:
explode('Req_ID', ignore_index=True)将列表类型的Req_ID列展开,每个列表元素对应一行,ignore_index=True保证新的DataFrame索引连续。
最终输出
Test_Step_ID Protocol_Name Req_ID 0 9.1.1 A SRS_0081d 1 9.1.2 B SRS_0079 2 9.1.3 C SRS_0082 3 9.1.3 C SRS_0082a 4 9.1.4 D SRS_0015 5 9.1.4 D SRS_0015c 6 9.1.4 D SRS_0015d
内容的提问来源于stack exchange,提问作者ruser
相关产品推荐
相关产品推荐

