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

pandas如何按列顺序迭代筛选满足列值条件的行

直白易懂的暴力实现方案

这个方案完全按照你描述的逻辑逐行实现,没有用复杂的pandas高级技巧,每一步都可以单独打印看结果,好理解好修改,哪怕效率不是最高也完全符合你的需求。

实现思路

完全贴合你提的筛选规则一步步走:

  • 固定按A→B→C的顺序遍历列
  • 维护一个「未被选中过的行」的集合,每轮只在这个集合里做筛选,避免重复选行
  • 每轮筛选两个硬条件:
    • 当前遍历的列值为1
    • 这轮之前已经遍历过的所有列,在该行的值全不为1
  • 每轮筛到的行单独存起来,同时把这些行从「未被选中」的集合里删掉,再进入下一轮遍历

完整可运行代码

import pandas as pd

# 构造你给出的示例DataFrame
df = pd.DataFrame({
    'A': [0, 0],
    'B': [0, 1],
    'C': [1, 1]
})

# 固定列的遍历顺序,之后要改顺序直接改这个列表就行
col_traverse_order = ['A', 'B', 'C']
# 存每一轮的筛选结果
round_results = []
# 标记哪些行还没被选中,初始状态所有行都待筛选
not_selected = pd.Series([True] * len(df), index=df.index)

for round_idx, current_col in enumerate(col_traverse_order):
    # 先取出当前还没被选的所有行
    available_rows = df[not_selected]
    # 条件1:当前列的值等于1
    meet_current_col_1 = available_rows[current_col] == 1
    # 条件2:所有前置遍历过的列值都不为1
    prev_cols = col_traverse_order[:round_idx]
    if len(prev_cols) == 0:
        # 遍历第一列的时候没有前置列,条件2默认全部满足
        meet_prev_all_0 = pd.Series([True] * len(available_rows), index=available_rows.index)
    else:
        # 逐行检查所有前置列,全不等于1才符合要求
        meet_prev_all_0 = (available_rows[prev_cols] != 1).all(axis=1)
    # 两个条件同时满足的行就是本轮要选的结果
    current_round_selected = available_rows[meet_current_col_1 & meet_prev_all_0]
    # 把本轮结果存起来,标注是哪一列筛出来的
    round_results.append( (current_col, current_round_selected) )
    # 把本轮选中的行标记为已选,下一轮不再参与筛选
    not_selected.loc[current_round_selected.index] = False

# 打印结果验证
for col_name, selected_rows in round_results:
    print(f"遍历列{col_name}筛选结果:")
    print(selected_rows)
    print("-"*30)

运行结果

和你预期的逻辑完全匹配:

遍历列A筛选结果:
Empty DataFrame
Columns: [A, B, C]
Index: []
------------------------------
遍历列B筛选结果:
   A  B  C
1  0  1  1
------------------------------
遍历列C筛选结果:
   A  B  C
0  0  0  1
------------------------------

补充说明

这个写法没有做任何性能优化,所有判断都是直白直译你的需求,你可以在每一步加print打印中间结果,很容易调试。如果之后要加新列、改遍历顺序,只需要修改col_traverse_order列表即可,不需要动核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:03:25