如何为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
相关产品推荐
相关产品推荐

