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

如何为DataFrame中另一列含指定值的行赋值?含多条件场景

Pandas DataFrame列赋值问题:单条件与多条件实现

一、单条件:根据Details列包含Green更新Color列

原代码问题点

  • if 'Green' in df['Details'] 逻辑错误:Series的in操作是检查索引是否存在该值,而非元素是否包含目标字符串,无法实现逐行判断。
  • 列名大小写不一致:DataFrame定义的是Color列,但代码中写的是df['color'],Pandas对列名大小写敏感,会导致赋值到新列而非目标列。
  • apply.color1 语法错误:apply()需要传入可调用对象,不能直接通过点属性的方式调用变量。

正确实现代码

import pandas as pd

testing = {
    'Details': ['Green Mercedes', 'Blue mercedes', 'Green ford', 'Red ford', 'Blue Kia', 'Green Audi'],
    'Color': ['','','','','',''],
}

df = pd.DataFrame(testing)
color1 = "Green"

# 生成布尔掩码定位符合条件的行,用loc赋值
df.loc[df['Details'].str.contains('Green', case=False), 'Color'] = color1

print(df)

输出结果

Details Color
0  Green Mercedes Green
1   Blue mercedes      
2      Green ford Green
3        Red ford      
4        Blue Kia      
5      Green Audi Green

说明:str.contains('Green', case=False) 生成布尔Series标记目标行,case=False可选,用于忽略大小写匹配;df.loc[布尔掩码, 目标列] 是Pandas中条件赋值的标准写法。


二、多条件:结合Details含Green和Sold状态赋值

要同时匹配「Details包含Green」+「Sold列状态」两个条件,可通过两种直观方式实现:

方法1:嵌套np.where实现多分支判断

import pandas as pd
import numpy as np

testing = {
    'Details': ['Green Mercedes', 'Blue mercedes', 'Green ford', 'Red ford', 'Blue Kia', 'Green Audi'],
    'Sold': ['Yes','Yes','No','No','Yes','No'],
    'Color': ['','','','','',''],
}

df = pd.DataFrame(testing)
color1 = "Green Sold"
color2 = "Green not sold"

# 先判断是否含Green,再根据Sold状态赋值
df['Color'] = np.where(
    df['Details'].str.contains('Green'),
    np.where(df['Sold'] == 'Yes', color1, color2),
    df['Color']  # 不满足Green条件的行保持原值
)

print(df)

方法2:用df.loc分两次赋值(更直观)

import pandas as pd

testing = {
    'Details': ['Green Mercedes', 'Blue mercedes', 'Green ford', 'Red ford', 'Blue Kia', 'Green Audi'],
    'Sold': ['Yes','Yes','No','No','Yes','No'],
    'Color': ['','','','','',''],
}

df = pd.DataFrame(testing)
color1 = "Green Sold"
color2 = "Green not sold"

# 条件1:含Green且Sold=Yes
df.loc[(df['Details'].str.contains('Green')) & (df['Sold'] == 'Yes'), 'Color'] = color1
# 条件2:含Green且Sold=No
df.loc[(df['Details'].str.contains('Green')) & (df['Sold'] == 'No'), 'Color'] = color2

print(df)

两种方法的输出结果

Details Sold           Color
0  Green Mercedes  Yes      Green Sold
1   Blue mercedes  Yes                
2      Green ford   No  Green not sold
3        Red ford   No                
4        Blue Kia  Yes                
5      Green Audi   No  Green not sold

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:26:20