如何在Pandas中当ID和year列值重复时清空对应employee列值
问题原因分析
- 你原来的代码逻辑存在错误:
df["ID"].duplicated() & df["year"].duplicated()是分别判断「ID单独重复」和「year单独重复」后取交集,和你需要的「ID+year组合同时重复」的逻辑完全不符,这就是出现误删的核心原因。
举个简单的反例:如果有行数据是ID=2, year=2023,其中ID=2之前在2022年出现过(ID列判定为重复),year=2023之前被ID=1使用过(year列判定为重复),那这行的ID+year组合其实是首次出现,不该被清空,但按你原来的逻辑就会被误判为需要清空。
修正代码
直接使用duplicated方法的subset参数指定要判断重复的列组合即可,默认keep='first'参数会自动标记除每组第一次出现之外的所有重复行:
df.loc[df.duplicated(subset=['ID', 'year']), 'employee'] = ''
效果验证
以测试数据为例:
| ID | year | employee |
|---|---|---|
| 1 | 2022 | 张三 |
| 1 | 2022 | 李四 |
| 1 | 2023 | 王五 |
| 2 | 2022 | 赵六 |
| 2 | 2023 | 孙七 |
| 2 | 2023 | 周八 |
运行修正代码后输出结果:
| ID | year | employee |
|---|---|---|
| 1 | 2022 | 张三 |
| 1 | 2022 | |
| 1 | 2023 | 王五 |
| 2 | 2022 | 赵六 |
| 2 | 2023 | 孙七 |
| 2 | 2023 |
完全符合需求。
内容的提问来源于stack exchange,提问作者Eng_GR
相关产品推荐
相关产品推荐

