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

Python中如何定位每行首个零值列并更新对应标志位

嘿,这个需求我之前处理类似的学生成绩数据时也遇到过,用Pandas来实现其实挺顺畅的,我给你一步步拆解解决方案,保证你能复现想要的结果:

首先,先把你给出的示例数据转换成可运行的Pandas DataFrame,方便后续操作:

import pandas as pd

data = {
    'StuID': ['Ak', 'XF', 'WE'],
    'Stage1': [80.1, 0, 23],
    'Stage2': [23.3, 0, 34],
    'Stage3': [0, 0, 43],
    'Stage4': [0, 0, 34],
    'S1Flag': [0, 0, 0],
    'S2Flag': [0, 0, 0],
    'S3Flag': [0, 0, 0],
    'S4Flag': [0, 0, 0]
}
df = pd.DataFrame(data)

接下来分两步搞定核心需求:定位首次零分阶段,然后设置对应标志位。

步骤1:找出每个学生首次出现零分的阶段

首先我们提取所有以Stage开头的列,然后对每一行找到第一个值为0的列名:

# 筛选所有Stage相关的列
stage_cols = [col for col in df.columns if col.startswith('Stage')]
# 对每行,找出第一个值为0的Stage列(eq(0)转布尔值,idxmax取第一个True的列名)
first_zero_stage = df[stage_cols].eq(0).idxmax(axis=1)

这里的逻辑是:eq(0)把Stage列的数值转换成布尔值(0对应True,其他分数对应False),idxmax(axis=1)会返回每行中第一个出现True的列名——因为True的数值优先级高于False,所以刚好能定位到首次出现零分的阶段。

步骤2:根据定位结果设置对应Flag列

接下来我们需要把Stage列映射到对应的Flag列,比如Stage1对应S1Flag,然后给这些Flag列赋值1:

# 建立Stage列到Flag列的映射关系
stage_to_flag = {
    'Stage1': 'S1Flag',
    'Stage2': 'S2Flag',
    'Stage3': 'S3Flag',
    'Stage4': 'S4Flag'
}
# 把首次零分的Stage列转换成对应的Flag列名
first_zero_flag = first_zero_stage.map(stage_to_flag)

# 遍历每行,给对应的Flag列设为1(跳过无零分的学生,比如WE)
for idx, flag_col in first_zero_flag.items():
    if df.loc[idx, stage_cols].eq(0).any():
        df.loc[idx, flag_col] = 1

运行完这段代码后,你的DataFrame就会和示例中的结果完全一致:

StuID  Stage1  Stage2  Stage3  Stage4  S1Flag  S2Flag  S3Flag  S4Flag
0    Ak    80.1    23.3     0.0     0.0       0       0       1       0
1    XF     0.0     0.0     0.0     0.0       1       0       0       0
2    WE    23.0    34.0    43.0    34.0       0       0       0       0

更直观的简化写法(适合新手理解)

如果你觉得上面的写法有点绕,也可以用apply函数逐行处理,逻辑更直白:

def set_first_zero_flag(row):
    # 按顺序检查每个Stage
    for stage, flag in stage_to_flag.items():
        if row[stage] == 0:
            row[flag] = 1
            break  # 找到第一个零分就停止检查
    return row

df = df.apply(set_first_zero_flag, axis=1)

这种写法就是逐行遍历每个Stage,一旦找到第一个0就设置对应Flag并跳出循环,完全符合你要的逻辑,而且容易看懂。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:39:26