如何在Python中根据多条件填充DataFrame的Action列
解决方案
你可以通过两种方式实现需求,优先推荐向量化操作的方法(效率更高):
方法一:使用pandas.DataFrame.loc(推荐)
利用str.contains检查字符串包含关系,结合逻辑与条件筛选目标行,直接赋值:
import pandas as pd df1= pd.DataFrame.from_dict({ 'Description': ['This car is german', 'This vehicle is french', 'This automobile is british', 'This car is british', 'This thing is british'], 'SUV?': ['Yes', 'No', 'No', 'Yes', 'Yes'], 'Action': [' ', ' ', ' ', ' ', ' '], }) # 筛选同时满足两个条件的行,修改Action列 df1.loc[(df1['Description'].str.contains('british')) & (df1['SUV?'] == 'Yes'), 'Action'] = 'buy' print(df1)
执行后结果:
| Description | SUV? | Action |
|---|---|---|
| This car is german | Yes | |
| This vehicle is french | No | |
| This automobile is british | No | |
| This car is british | Yes | buy |
| This thing is british | Yes | buy |
注意:条件两边要加括号,因为
&的运算符优先级高于比较运算符,避免逻辑错误。
方法二:使用apply(逐行处理)
如果坚持用lambda,需要指定axis=1以逐行访问数据,同时判断两个列的条件:
df1['Action'] = df1.apply( lambda row: 'buy' if ('british' in row['Description'] and row['SUV?'] == 'Yes') else row['Action'], axis=1 )
这种方法适合小数据集,大数据量下效率不如第一种向量化方法。
内容的提问来源于stack exchange,提问作者Omoton
相关产品推荐
相关产品推荐

