You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas实现两列含相同指定子串时返回True的判断逻辑?

Pandas判断两列是否同时包含同一目标子串

原始数据

id               k1            k2
0   1         re_setup      oo_setup
1   2         oo_setup      oo_setup
2   3         alerting        bounce
3   4           bounce  re_oversetup
4   5     re_oversetup      alerting
5   6       alerting_s      re_setup
6   7     re_oversetup      oo_setup
7   8         alerting        bounce
8   9  alerting_bounce        bounce

需求说明

当k1和k2列同时包含子串setup,或者**同时包含子串bounce**时,返回True;其他情况(包括一列含setup另一列含bounce,或其中一列不含任一目标子串)返回False。

问题分析

你尝试的代码:

df['same1'] = df[['k1', 'k2']].apply(lambda x: x.str.contains('setup|bounce')).all(1)

该逻辑仅判断两列是否都包含setup或bounce中的任意一个,但未区分两列是否包含同一个子串。比如第3行k1含bounce、k2含setup,满足“都包含任一目标子串”,所以返回True,不符合需求。

正确实现方法

方法一:分条件判断匹配组

先分别标记每列是否包含setup或bounce,再筛选出两列属于同一组的情况:

# 标记各列是否包含setup
has_setup_k1 = df['k1'].str.contains('setup')
has_setup_k2 = df['k2'].str.contains('setup')
# 标记各列是否包含bounce
has_bounce_k1 = df['k1'].str.contains('bounce')
has_bounce_k2 = df['k2'].str.contains('bounce')

# 同时含setup 或者 同时含bounce
df['same'] = (has_setup_k1 & has_setup_k2) | (has_bounce_k1 & has_bounce_k2)

执行后得到预期结果:

id               k1               k2   same
0   1         re_setup         oo_setup   True
1   2         oo_setup         oo_setup   True
2   3         alerting           bounce  False
3   4           bounce     re_oversetup  False
4   5     re_oversetup  alerting_bounce  False
5   6       alerting_s         re_setup  False
6   7     re_oversetup         oo_setup   True
7   8         alerting           bounce  False
8   9  alerting_bounce           bounce   True

方法二:提取子串类型后比较

通过apply对每行的k1、k2提取对应的子串标签,再判断标签是否一致且不为其他类型:

def check_same(row):
    # 确定k1的子串类型
    if 'setup' in row['k1']:
        type1 = 'setup'
    elif 'bounce' in row['k1']:
        type1 = 'bounce'
    else:
        type1 = 'other'
    # 确定k2的子串类型
    if 'setup' in row['k2']:
        type2 = 'setup'
    elif 'bounce' in row['k2']:
        type2 = 'bounce'
    else:
        type2 = 'other'
    # 仅当两者同为setup或同为bounce时返回True
    return (type1 == type2) and (type1 != 'other')

df['same'] = df.apply(check_same, axis=1)

这个方法逻辑更直观,同样能得到符合要求的结果。

内容的提问来源于stack exchange,提问作者ah bon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 00:45:35