Pandas中除单列外其余列均重复时的行去重方法
解决方案:按指定规则筛选Pandas DataFrame
你可以通过两种简洁的方式实现需求,核心思路都是对A/B/C/D列相同的组保留E值最大的行,不同的行自然保留:
方法一:分组取最大值索引
利用groupby对A/B/C/D分组,通过idxmax()获取每组中E值最大的行索引,再提取这些行:
import pandas as pd # 假设你的DataFrame名为df result_df = df.loc[df.groupby(['A', 'B', 'C', 'D'])['E'].idxmax()]
方法二:排序后去重
先按E降序排序,再按A/B/C/D去重(保留第一个即E最大的行),可选恢复原索引顺序:
result_df = df.sort_values('E', ascending=False).drop_duplicates(subset=['A', 'B', 'C', 'D']).sort_index()
示例验证
构造测试数据并执行筛选:
data = { 'A': ['x', 'x', 'y', 'y', 'z'], 'B': ['a', 'a', 'b', 'b', 'c'], 'C': ['m', 'm', 'n', 'n', 'p'], 'D': ['q', 'q', 'r', 'r', 's'], 'E': [10, 12, 5, 8, 3] } df = pd.DataFrame(data) # 用方法一执行 result_df = df.loc[df.groupby(['A', 'B', 'C', 'D'])['E'].idxmax()] print(result_df)
输出结果:
A B C D E 1 x a m q 12 3 y b n r 8 4 z c p s 3
完全符合需求:A/B/C/D相同的组保留了E最大的行,唯一的行也被保留。
内容的提问来源于stack exchange,提问作者ash1
相关产品推荐
相关产品推荐

