如何在pandas中基于DataFrame数值列按规则创建条件新列
实现方案
下面提供两种高频使用的实现方式,均可直接满足需求:
方法1:使用pd.cut(最适配区间分组场景)
pd.cut是pandas专门用于数值区间分箱的工具,代码简洁、边界处理逻辑清晰:
import pandas as pd import numpy as np # 预处理步骤:如果A列的空白是字符串格式,先统一转为数值型空值 df['A'] = pd.to_numeric(df['A'], errors='coerce') # 定义区间边界和对应返回值 bins = [-np.inf, 19, 49, np.inf] labels = ["between 0 - 19", "between 20 to 49", "greater than 50"] # 生成新列,空值/小于0的异常值自动返回空 df['new_column'] = pd.cut( df['A'], bins=bins, labels=labels, include_lowest=True ).mask(df['A'] < 0)
如果确认A列没有小于0的异常值,最后一行的.mask(df['A'] < 0)可以直接删除。
方法2:使用np.select(逻辑更直观,适合自定义多条件)
如果偏好显式写判定条件,可以用numpy的select方法,可读性更强:
import pandas as pd import numpy as np df['A'] = pd.to_numeric(df['A'], errors='coerce') # 定义所有判定条件 conditions = [ df['A'] >= 50, df['A'].between(20, 49), df['A'].between(0, 19) ] # 定义条件对应的返回值 outputs = [ "greater than 50", "between 20 to 49", "between 0 - 19" ] # 所有条件不满足的场景默认返回空值 df['new_column'] = np.select(conditions, outputs, default=np.nan)
内容的提问来源于stack exchange,提问作者Daven1
相关产品推荐
相关产品推荐

