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

如何按分组与mask列将Pandas DataFrame中首个0转为1?

解决方案

步骤说明

要实现按组修改第一个符合条件的target_col值,核心是精准定位每个组内mask_col为TRUE且target_col为0的第一行,再单独修改该行的值。

代码实现

首先构造你的样本数据:

import pandas as pd

data = {
    'mask_col': [True, True, False, True, False, True, True, False, False, False, True, False],
    'categorical_col': ['A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B'],
    'target_col': [1, 1, None, 0, None, 0, 1, None, None, None, 0, None]
}
df = pd.DataFrame(data)

然后执行修改操作:

# 1. 标记所有待检查的行:mask_col为True且target_col等于0
candidate_mask = df['mask_col'] & (df['target_col'] == 0)

# 2. 按组筛选出每个组内第一个符合条件的行
first_target_row = df[candidate_mask].groupby('categorical_col').head(1)

# 3. 修改这些行的target_col值为1
df.loc[first_target_row.index, 'target_col'] = 1

结果验证

执行后查看DataFrame,第4行(索引3)和第11行(索引10)的0已改为1,第6行(索引5)的0保持不变,完全符合需求:

indexmask_colcategorical_coltarget_col
0TrueA1
1TrueA1
2FalseANaN
3TrueA1
4FalseANaN
5TrueA0
6TrueB1
7FalseBNaN
8FalseBNaN
9FalseBNaN
10TrueB1
11FalseBNaN

代码解释

  • candidate_mask:先筛选出所有可能需要修改的行,缩小处理范围。
  • groupby('categorical_col').head(1):对筛选后的行按组取第一行,精准锁定每个组内的目标行。
  • df.loc[first_target_row.index, 'target_col'] = 1:通过索引定位目标行,直接修改target_col的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:40:45