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

使用'in'判断Pandas DataFrame列是否存在指定值失效是什么原因?

问题根因

你遇到的不符合预期的结果,本质是对pandas中in操作符的作用逻辑理解偏差导致的:

  • 值 in Series 这个语法,检查的是目标值是否存在于Series的索引标签中,而非检查是否存在于Series的存储值中
  • 你切第一个区间[0:16]时,得到的子DataFrame的索引是默认继承的原始行号0~15,12刚好在索引范围内,所以12 in L.state返回了True,这只是巧合,和state列本身有没有12没有关联
  • 第二个区间切的是[16:51],得到的子DataFrame的索引是16~50,12不在索引范围内,所以哪怕state列里确实有12这个值,in判断也会返回False

正确实现方式

要判断Series的存储值中是否包含指定值,用以下两种写法都可以:

# 写法1:直接判断等值条件是否有至少一个成立,性能更高
v = (L.state == 12).any()

# 写法2:用isin方法,适合同时判断多个目标值的场景
v = L.state.isin([12]).any()

额外优化建议

如果你的最终目标是批量判断每个周期是否出现过state=12,可以不用逐段切片判断,先给每行打周期分组标签,再分组聚合判断,效率更高:

  1. 先通过df['cycle_id'] = (df['key'] == 102).cumsum()给每个周期生成唯一分组ID
  2. 再用df.groupby('cycle_id')['state'].apply(lambda x: (x==12).any())就能一次性得到所有周期的判断结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:21:05