Pandas drop_duplicates()返回异常结果,是否有人遇到过该问题?
问题分析与解决方法
问题原因
drop_duplicates() 默认仅对比DataFrame列中的数据,不会将MultiIndex纳入重复判断逻辑。你的DataFrame里所有行的values列值都是10,所以默认会判定所有行都是重复项,只保留第一行。
解决方案
方案1:仅针对MultiIndex去重
如果目标是保留索引唯一的行(即只去除索引完全重复的第4行),直接利用索引的去重方法即可:
df = df[~df.index.duplicated()]
执行后得到预期的3行结果:
values 2020-09-30 2020-12-31 2021-01-15 10 2021-01-30 10 2021-02-04 10
方案2:同时校验索引与列数据去重
如果需要同时判断索引和列数据是否都重复(比如索引相同但列值不同时保留,两者都相同时去重),可以先将索引转为普通列,去重后再恢复索引:
# 索引转为普通列 df_reset = df.reset_index() # 执行去重(默认保留首次出现的重复项) df_reset = df_reset.drop_duplicates() # 恢复原三级索引 df = df_reset.set_index(['level_0', 'level_1', 'level_2'])
补充说明
drop_duplicates() 的subset参数可指定判断重复的列,但默认不包含索引。若不想转换索引,也可手动将索引各级纳入subset,但操作不如上述两种方法直接。
内容的提问来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

