Pandas判断同一行某列字符串是否为另一列子串,现有代码全部返回Yes
问题原因
你编写的代码是对每个DEPTH列的值,全局扫描整个Description列判断是否存在匹配,搭配.any()后只要全列有任意一行匹配就返回Yes,这就是所有行结果都为Yes的原因,你的需求是同一行的两个字段比对,需要按行维度处理数据。
代码实现
新增Compare列输出Yes/No
以下两种写法都可以得到你预期的结果:
- 行方向apply(逻辑直观,适合小数据量)
df['Compare'] = df.apply(lambda row: 'Yes' if row['DEPTH'] in row['Description'] else 'No', axis=1)
- 列表推导式实现(性能更优,适合十万行以上的大表)
df['Compare'] = ['Yes' if depth in desc else 'No' for depth, desc in zip(df['DEPTH'], df['Description'])]
直接过滤不符合要求的行
如果不需要保留Compare列,可一步完成过滤操作,删掉DEPTH未出现在同一行Description的行:
df = df[[depth in desc for depth, desc in zip(df['DEPTH'], df['Description'])]]
内容的提问来源于stack exchange,提问作者Heather
相关产品推荐
相关产品推荐

