Pandas DataFrame如何基于指定列当前与前一行值新增极性切换标识列
正确实现代码
直接用pandas向量化操作实现,性能高且逻辑完全匹配需求:
# 分别判断两种极性反转场景 cond1 = (data['customer_csate_score'].shift() <= 0) & (data['customer_csate_score'] > 0) cond2 = (data['customer_csate_score'].shift() >= 0) & (data['customer_csate_score'] < 0) # 合并条件取或,首行无前置值默认填充False data['customer_csate_score_toggle_status'] = (cond1 | cond2).fillna(False)
原有代码错误说明
- 尝试1错误点:
apply调用逻辑错误,lambda参数传入的是完整的customer_csate_score全列和shift后的全列,而非逐行对应的当前值、前值,返回结果不符合预期。且逐行apply性能远低于向量化操作,不推荐使用。 - 尝试2错误点:
条件括号优先级错误,仅实现了单种极性反转逻辑,且将筛选后的DataFrame子集直接赋值给新列,会导致不满足条件的行全部为NaN,不符合要求。
内容的提问来源于stack exchange,提问作者usert4jju7
相关产品推荐
相关产品推荐

