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

如何在Pandas中基于两个阈值为DataFrame分配新列值?

解决方案

首先必须先将字符串类型的logvalue转换为数值类型,否则无法进行数值比较。以下是几种可靠的实现方式:

方法一:使用numpy.where(直观易懂)

import pandas as pd
import numpy as np

# 先转换logvalue为数值类型,errors='coerce'将非数值内容转为NaN
df_x['logvalue'] = pd.to_numeric(df_x['logvalue'], errors='coerce')

# 应用规则创建新列
df_x['violatedInstances'] = np.where(
    (df_x['logvalue'] >= 15) & (df_x['logvalue'] <= 20),
    0,
    1
)

注:如果确定logvalue都是合法数值,也可以用df_x['logvalue'].astype(float)完成转换,pd.to_numeric的优势是能灵活处理异常值。

方法二:使用Pandas.between(简洁高效)

import pandas as pd

# 转换类型
df_x['logvalue'] = pd.to_numeric(df_x['logvalue'], errors='coerce')

# between默认匹配闭区间[15,20],返回布尔值;取反后转int(True→1,False→0)
df_x['violatedInstances'] = (~df_x['logvalue'].between(15, 20)).astype(int)

# 也可以用以下写法,效果完全一致:
# df_x['violatedInstances'] = 1 - df_x['logvalue'].between(15, 20).astype(int)

方法三:使用apply(适合自定义复杂逻辑,小数据量适用)

import pandas as pd

df_x['logvalue'] = pd.to_numeric(df_x['logvalue'], errors='coerce')

def judge_violation(val):
    if pd.isna(val):  # 处理转换后为NaN的异常值,这里默认标记为违规(赋值1),可按需调整
        return 1
    return 0 if 15 <= val <=20 else 1

df_x['violatedInstances'] = df_x['logvalue'].apply(judge_violation)

关键注意点

  • 类型转换是核心:字符串无法直接与数值比较,这是多数尝试失败的根本原因。
  • 异常值处理:如果logvalue包含非数值字符串,pd.to_numeric(..., errors='coerce')会将其转为NaN,可根据业务需求决定这类值的标记结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:25:51