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

如何为DataFrame按条件生成Green列?现有代码报错求助

问题解决思路及代码

你的原代码存在两个核心问题:

  • 只覆盖了「apple且含green」的情况为1,其余所有情况(包括banana、apple不含green、Color列缺失)都直接赋值0,完全没处理banana要设为NA的需求
  • 未处理Color列的缺失值:当Color是NaN时,str.lower().str.contains()会返回NaN,导致逻辑判断结果异常,最终被np.where当成False赋值0,不符合预期

修正后的矢量化代码(效率最高,适合大数据集)

import pandas as pd
import numpy as np

# 示例测试数据
df = pd.DataFrame({
    'Fruit': ['apple', 'apple', 'banana', 'apple', 'banana'],
    'Color': ['Green', 'Red', 'Yellow', np.nan, 'Green']
})

# 新增Green列
df['Green'] = np.where(
    df['Fruit'] == 'apple',  # 先判断是否为apple
    # apple分支:用case=False实现不区分大小写匹配,na=False处理缺失值
    np.where(df['Color'].str.contains('green', case=False, na=False), 1, 0),
    np.nan  # 非apple(即banana)的情况赋值NA
)

代码说明

  1. 外层np.where负责分流:仅处理apple行,其他行直接设为np.nan(对应pandas的NA)
  2. 内层np.where处理apple分支:用str.contains自带的case=False参数实现不区分大小写匹配,无需手动转小写;na=False将Color列的缺失值统一判定为「不含green」,避免NaN导致的逻辑错误
  3. 移除了原代码中多余的== True,布尔值可直接参与判断

更简洁的写法

用pandas原生where方法实现,逻辑更紧凑:

df['Green'] = (df['Color'].str.contains('green', case=False, na=False).astype(int)).where(df['Fruit'] == 'apple', np.nan)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:25:07