如何为DataFrame添加标识E列修改行的列?解决KeyError报错
问题分析与解决
报错原因
你的cond2写法完全错误:'E' == 0是一个直接的布尔判断,结果为False,随后df['E'==0]等同于试图用False作为列名去索引DataFrame,这显然不存在,因此抛出KeyError: False。
修正后的代码
import numpy as np import pandas as pd # 先定义目标列集合 cols = ['A', 'B', 'C', 'D'] # 修正条件判断逻辑 cond1 = df.duplicated(subset=cols) # 标记除首次出现外的重复行 cond2 = df['E'] == 0 # 正确筛选E列等于0的行 # 添加remarks列,注意列名需加引号 df['remarks'] = np.where(cond1 & cond2, True, False)
额外优化说明
- 如果你需要标记所有重复组内的行(包括首次出现的重复行),可以修改
duplicated的keep参数:cond1 = df.duplicated(subset=cols, keep=False) - 若要避免误标记原始数据中E列本来就是0的非重复行,建议保留原始数据副本,通过对比前后E列值判断:
# 假设原始数据副本为df_original df['remarks'] = (df.duplicated(subset=cols, keep=False) & (df['E'] == 0) & (df_original['E'] != 0))
内容的提问来源于stack exchange,提问作者Smith
相关产品推荐
相关产品推荐

