Pandas匹配长度不一致的两列值 提取指定测试项对应结果
实现思路
每行的测试项与结果值按换行符一一对应,直接对每行做匹配取值即可,无需冗余循环,核心逻辑是找到a在测试项列表中的索引,取结果列表相同位置的数值。
完整实现代码
import pandas as pd # 构造示例数据 df = pd.DataFrame({'Tests':['a\nb\nc', 'b\nc\na'], 'Results':['1.2\n3.4\n4', '2.3\n1\n1']}) # 提取a对应的结果,可根据需求修改匹配的测试项名称 df['a result'] = df.apply( lambda row: row['Results'].split('\n')[row['Tests'].split('\n').index('a')], axis=1 ) # 如有部分行不含测试项a,可加判断避免报错,写法如下: # df['a result'] = df.apply( # lambda row: row['Results'].split('\n')[row['Tests'].split('\n').index('a')] if 'a' in row['Tests'] else None, # axis=1 # ) print(df)
输出结果
Tests Results a result 0 a\nb\nc 1.2\n3.4\n4 1.2 1 b\nc\na 2.3\n1\n1 1
原有代码的问题说明
for row in df默认遍历的是DataFrame的列名,不是行数据,遍历行需要用df.iterrows()等方法- 直接判断
tests[0] == 'a'是对整列做批量比较,返回的是布尔值序列,不能直接用if做单值判断 - 逐列判断位置的写法扩展性差,后续要取其他测试项结果要修改大量逻辑
内容的提问来源于stack exchange,提问作者Chris Linke
相关产品推荐
相关产品推荐

