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

Pandas中仅当_ans后缀列中10出现1次时执行掩码操作的实现问题

实现方案

你只需要在循环逻辑中新增10出现次数的判断条件即可,修改后完整代码如下:

import pandas as pd

df = pd.DataFrame(data={'a_ans':[0,1,1,10,11],
                        'a_num': [1,8,90,2,8],
                        'b_ans': [0,10,139,10,18],
                        'b_num': [15,43,90,14,87]}).astype(float)

out=[]

for i in ['a_', 'b_']:
    pairs = df.loc[:,df.columns.str.startswith(i)] # 取对应前缀的配对列
    ans_col = pairs[i+'ans']
    # 统计当前_ans列中10的出现次数
    count_10 = (ans_col == 10).sum()
    if count_10 == 1:
        # 仅当10仅出现1次时执行掩码替换
        mask1 = ans_col == 10 
        mask2 = ans_col.eq(ans_col.mask(mask1).max())
        pairs = pairs.mask(mask1, 1001).mask(mask2, 1002)
    # 不满足条件的列直接保留原始值
    out.append(pairs)

# 可直接合并为完整DataFrame使用
result = pd.concat(out, axis=1)

改动说明

  • 新增count_10变量统计对应_ans列中值等于10的行数
  • 新增判断逻辑,仅当count_10 == 1时执行原有的掩码替换逻辑,不符合条件的列完全保留原始值
  • 新增pd.concat步骤可直接将输出列表合并为完整DataFrame,方便后续处理

运行后仅a_ans对应的配对列会执行替换,b_ans对应的列完全保留原始值,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:54:03