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

如何优化多组numpy.where函数实现DataFrame条件赋值?

优化Pandas多条件列赋值的简洁方案

针对你通过多组np.where实现Pandas DataFrame多条件列赋值导致代码冗余的问题,推荐两种简洁优雅的实现方式:

方法一:字典映射+元组匹配

把所有(code, color)的组合与目标值的对应关系集中存储在一个字典里,再通过元组匹配快速赋值:

  1. 定义规则映射字典:
# 所有(code, color)组合对应的new_column值
mapping_dict = {
    ("500", "blue"): "1",
    ("500", "green"): "2",
    ("100", "red"): "3",
    ("42", "yellow"): "4"
}
  1. 为new_column赋值:
# 高效版:将code和color列组合成元组序列后映射
df["new_column"] = pd.Series(list(zip(df["code"], df["color"]))).map(mapping_dict).fillna("")

# 易读版:用apply遍历行(小数据集更友好)
# df["new_column"] = df.apply(lambda x: mapping_dict.get((x["code"], x["color"]), ""), axis=1)

优势:所有规则集中管理,新增/修改规则只需调整字典,代码简洁易读,小/中数据集下效率足够。

方法二:规则DataFrame合并

如果规则数量极多,或规则需要从外部文件导入,可以先创建规则DataFrame,再通过merge完成赋值:

  1. 创建规则DataFrame:
rules_df = pd.DataFrame({
    "code": ["500", "500", "100", "42"],
    "color": ["blue", "green", "red", "yellow"],
    "new_column": ["1", "2", "3", "4"]
})
  1. 合并原DataFrame与规则DataFrame:
# 左连接保留原表所有行,未匹配的用空字符串填充
df = df.merge(rules_df, on=["code", "color"], how="left").fillna({"new_column": ""})

优势:规则可独立维护(比如导出为CSV文件),大数据集下效率优于apply,扩展性更强。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:53:05