如何筛选pandas DataFrame中两列含相同phase编号的行
pandas筛选两列phase编号匹配的行
全程用pandas内置字符串向量化方法实现,无需写逐行循环,执行效率高,步骤如下:
- 首先导入pandas,构造示例数据(已有DataFrame可跳过该步)
import pandas as pd df = pd.DataFrame({ 'data1': ['overall_phase1_b3', 'overall_phase2_b3', 'overall_phase3_b3'], 'data2': ['overall_phase1_b5', 'overall_phase5_b5', 'overall_phase3_b5'] })
- 提取两列中phase对应的编号:用正则
phase(\d+)捕获phase后跟随的数字,就是需要比对的编号值
# 先存为临时列,逻辑更清晰易排查 df['p1'] = df['data1'].str.extract(r'phase(\d+)') df['p2'] = df['data2'].str.extract(r'phase(\d+)')
- 筛选两列编号相等的行,删除临时辅助列即可得到结果
result = df[df['p1'] == df['p2']].drop(columns=['p1', 'p2'])
如果不想生成临时辅助列,也可以直接一行完成筛选,效果完全一致:
# 无临时列的简洁写法 result = df[df['data1'].str.extract(r'phase(\d+)')[0] == df['data2'].str.extract(r'phase(\d+)')[0]]
最终输出的result和期望结果完全一致:
data1 data2 0 overall_phase1_b3 overall_phase1_b5 2 overall_phase3_b3 overall_phase3_b5
如果你的phase编号不是纯数字(比如带字母后缀),只需要调整对应正则的捕获规则即可适配。
内容的提问来源于stack exchange,提问作者nerd
相关产品推荐
相关产品推荐

