如何在Pandas多级索引中仅针对主索引层级执行去重?
Pandas多级索引DataFrame按主索引层级去重
需求:针对MultiIndex(多级索引)的DataFrame,仅在同一主索引分组内执行去重操作,判断每组内的行是否重复,跨主索引的重复无需处理。
示例输入
entry,subentry,A,B 1 0 1.0 1.0 1 1.0 1.0 2 2.0 2.0 2 0 1.0 1.0 1 2.0 2.0 2 2.0 2.0
预期输出
entry,subentry,A,B 1 0 1.0 1.0 1 2.0 2.0 2 0 1.0 1.0 1 2.0 2.0
解决方案
通过groupby按主索引层级分组,再对每组应用drop_duplicates即可实现需求:
1. 构造示例DataFrame
先把示例数据转换成可运行的Pandas代码:
import pandas as pd # 构造原始数据 data = [ (1, 0, 1.0, 1.0), (1, 1, 1.0, 1.0), (1, 2, 2.0, 2.0), (2, 0, 1.0, 1.0), (2, 1, 2.0, 2.0), (2, 2, 2.0, 2.0) ] df = pd.DataFrame(data, columns=['entry', 'subentry', 'A', 'B']) # 设置多级索引 df = df.set_index(['entry', 'subentry'])
2. 按主索引分组去重
# 按主索引(level=0)分组,每组内执行去重 result_df = df.groupby(level=0, group_keys=False).apply(lambda x: x.drop_duplicates())
3. 查看结果
打印result_df即可得到符合预期的输出:
A B entry subentry 1 0 1.0 1.0 2 2.0 2.0 2 0 1.0 1.0 1 2.0 2.0
补充说明
groupby(level=0):指定按多级索引的第0层(即主索引entry)分组group_keys=False:避免分组后的结果保留额外的分组键索引- 若需仅针对特定列判断重复,可给
drop_duplicates()传入subset参数,比如x.drop_duplicates(subset=['A', 'B'])
内容的提问来源于stack exchange,提问作者darmstadt beste
相关产品推荐
相关产品推荐

