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

如何简化Pandas中基于两列Yes/No值的布尔索引条件

简化Pandas条件判断的几种实用写法

你的第一个条件本质是只要Partner或Dependents任意一个为"Yes"(包括两者都是),完全可以用更简洁的逻辑替代,下面是几种优雅的实现方式:

方法1:直接用逻辑或(|)组合判断

直接判断两列中至少一个为"Yes",和你原来的冗长条件逻辑完全等价:

conditions = [
    # 有伴侣、有家属,或两者都有
    (cleaned_df["Partner"] == "Yes") | (cleaned_df["Dependents"] == "Yes"),
    # 既无伴侣也无家属
    (cleaned_df["Partner"] == "No") & (cleaned_df["Dependents"] == "No")
]

方法2:对第二个条件取反

既然第二个条件是“两者都为No”,那么第一个条件就是它的否定,用~取反即可:

conditions = [
    # 有伴侣、有家属,或两者都有
    ~((cleaned_df["Partner"] == "No") & (cleaned_df["Dependents"] == "No")),
    # 既无伴侣也无家属
    (cleaned_df["Partner"] == "No") & (cleaned_df["Dependents"] == "No")
]

方法3:转布尔值后再操作

因为你的列只有"Yes"/"No",可以先把它们转成布尔类型(Yes=True,No=False),逻辑判断会更直观:

# 先将列转为布尔值
partner_bool = cleaned_df["Partner"] == "Yes"
dependents_bool = cleaned_df["Dependents"] == "Yes"

conditions = [
    # 有伴侣、有家属,或两者都有
    partner_bool | dependents_bool,
    # 既无伴侣也无家属
    ~partner_bool & ~dependents_bool
]

额外简化:结合生成新列的逻辑

如果是用numpy.select或pandas自带方法生成新列,甚至可以只写一个条件,剩下的用默认值处理:

import numpy as np

cleaned_df["family_status"] = np.select(
    [partner_bool | dependents_bool],
    ["有伴侣/家属"],
    default="无伴侣也无家属"
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:33:20