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

