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

如何筛选pandas DataFrame中值为1的列右侧存在0的行

正确实现方案

问题原因

你的代码存在两个核心问题:

  • shift指定了axis=0,是沿行方向(上下行)移动元素,你需要的是沿列方向(左右列)移动,应该改为axis=1
  • 你没有把每行的多个布尔判断结果合并为单个布尔值用于索引,需要加any(axis=1),表示只要该行存在任意一个满足条件的位置就保留

完整可运行代码

import pandas as pd

# 构造测试数据
test_df = pd.DataFrame({
    '2018-02': [0, 0, 0, 0, 1],
    '2018-03': [0, 1, 1, 0, 0],
    '2018-04': [1, 1, 1, 1, 0],
    '2018-05': [1, 0, 0, 1, 0],
    '2018-06': [1, 1, 1, 1, 0]
})

# 核心筛选逻辑:判断是否存在1右侧紧邻0的情况
match_mask = (test_df == 1) & (test_df.shift(-1, axis=1) == 0)
# 按行聚合判断:只要有一个位置满足就保留该行
result_df = test_df[match_mask.any(axis=1)]

print(result_df)

输出结果

2018-02  2018-03  2018-04  2018-05  2018-06
1        0        1        1        0        1
2        0        1        1        0        1
4        1        0        0        0        0

和预期的索引1、2、4的行完全一致。

方案说明

该方案为通用实现,不依赖任何列名硬编码,全部使用pandas向量化操作,性能足够处理大规模数据集。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:15:03