如何在Pandas中基于两列布尔值创建without_trial新列?
解决Pandas DataFrame创建条件布尔列的问题
你可以通过两种简单的方式实现需求,以下是具体方法:
方法一:直接向量化布尔运算(最简洁)
因为df['trial']和df['subscribe']本身就是布尔列,直接用布尔运算符组合即可:
df['without_trial'] = df['subscribe'] & ~df['trial']
~df['trial']对trial列取反,得到所有trial为False的行&表示逻辑与,只有当subscribe为True且trial取反后为True(即原trial为False)时,结果才为True
如果习惯显式判断,也可以写成:
df['without_trial'] = (df['subscribe'] == True) & (df['trial'] == False)
方法二:正确使用df.loc方法
如果你想用loc实现,需要先初始化新列为False,再定位符合条件的行修改值:
# 先初始化新列全为False df['without_trial'] = False # 定位符合条件的行,将对应值设为True df.loc[df['subscribe'] & ~df['trial'], 'without_trial'] = True
注意:Pandas中向量化逻辑运算必须用
&(与)、|(或)、~(非),不能用Python原生的and/or/not,这可能是你之前用loc出错的原因。
测试示例
以下是完整的测试代码,你可以直接运行验证:
import pandas as pd # 构造测试DataFrame data = { 'trial': [True, False, True, False], 'subscribe': [True, True, False, False] } df = pd.DataFrame(data) # 创建新列 df['without_trial'] = df['subscribe'] & ~df['trial'] print(df)
输出结果:
trial subscribe without_trial 0 True True False 1 False True True 2 True False False 3 False False False
内容的提问来源于stack exchange,提问作者user20057611
相关产品推荐
相关产品推荐

