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

如何基于多阈值在Pandas中生成符合特定条件的掩码

解决方案

这里有个简洁高效的方法来生成你需要的mask,直接看代码:

import pandas as pd

# 初始化你的数据和阈值
d = {'A': [0.1, 0.4, 0.2, 0.2], 'B': [0.7, 0.3, 0.2, 0.9], 'Z': [0.5, 0.3, 0.4, 0.6], 'sth': ['abc', 'something', 'unimportant', 'x']}
df = pd.DataFrame(data=d)
thresholds = {'A': 0.5, 'B':0.8, 'Z': 0.3}

# 核心操作:生成目标mask
target_cols = list(thresholds.keys())
# 获取每行最大值所在的列名
max_col_per_row = df[target_cols].idxmax(axis=1)
# 比较每行最大值与对应列的阈值
mask = df[target_cols].max(axis=1) < max_col_per_row.map(thresholds)

print(mask.tolist())  # 输出: [True, True, False, False]

步骤详解

让我一步步拆解逻辑,方便你理解:

  1. 筛选目标列:我们只需要处理thresholds里定义的列(A、B、Z),所以先提取这些列的数据,忽略非数值列sth。
  2. 定位最大值列:用idxmax(axis=1)方法可以快速找到每行最大值对应的列名——比如第0行的最大值在B列,第1行在A列。
  3. 阈值匹配与比较:通过map(thresholds)把列名转换成对应的阈值,再将每行的最大值和这个阈值做小于比较,就能得到我们需要的布尔mask。

结果验证

对照你的示例需求,逐行验证结果:

  • 行0:最大值0.7(B列),B列阈值0.8 → 0.7 < 0.8 → True
  • 行1:最大值0.4(A列),A列阈值0.5 → 0.4 < 0.5 → True
  • 行2:最大值0.4(Z列),Z列阈值0.3 → 0.4 > 0.3 → False
  • 行3:最大值0.9(B列),B列阈值0.8 → 0.9 > 0.8 → False

完全符合你给出的预期结果[True, True, False, False]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:07:37