如何用一行Pandas代码筛选DataFrame重复行(无重复则显示None)
解决Pandas按
full_name筛选重复行并处理无重复的情况 你的代码存在两个问题:
- Lambda表达式语法错误:Python三元表达式的正确格式是
结果1 if 条件 else 结果2,你写反了顺序;且groupby.filter()要求lambda返回布尔值(用于判断是否保留整个组),不能直接返回字符串。 groupby.filter()本身仅返回符合条件的行组成的DataFrame,无法在筛选逻辑内直接返回'None',需要额外判断筛选结果是否为空。
正确的一行代码实现
方法1(Python 3.8+,用海象运算符简化)
mktg_table = (filtered := mktg_employees.groupby('full_name').filter(lambda x: len(x) > 1)) if not filtered.empty else 'None'
方法2(兼容所有Python版本)
mktg_table = mktg_employees.groupby('full_name').filter(lambda x: len(x) > 1) if not mktg_employees.groupby('full_name').filter(lambda x: len(x) > 1).empty else 'None'
逻辑说明
groupby('full_name').filter(lambda x: len(x) >1):按full_name分组后,仅保留组内行数大于1的组(即重复full_name对应的所有行)。- 条件判断部分:检查筛选后的DataFrame是否为空,为空则返回
'None',否则返回筛选结果。
内容的提问来源于stack exchange,提问作者user22008888
相关产品推荐
相关产品推荐

