如何针对列D每个唯一值保留对应列F的最值并删除其余重复项?
解决思路
针对列D的每个唯一值,保留对应列F的最大、最小值行,以下是几种实用方案:
一、Excel 操作(无需编程)
方法1:公式筛选
- 在数据旁新增一列(比如G列),输入公式:
=OR(F1=MINIFS(F:F,D:D,D1),F1=MAXIFS(F:F,D:D,D1)) - 下拉填充公式到所有行,公式返回
TRUE的行就是需要保留的(F为对应D的最大/最小值) - 筛选G列为
TRUE的行,复制粘贴到新工作表即可
方法2:Power Query(适合大量数据)
- 选中数据区域,点击「数据」选项卡 → 「从表格/区域」(Excel 2016及以上版本支持)
- 在Power Query编辑器中:
- 选中列D,点击「转换」→「分组依据」
- 设置分组列为
D,添加两个聚合操作:- 新列名:
F最小值,操作选「最小值」,目标列选F - 新列名:
F最大值,操作选「最大值」,目标列选F
- 新列名:
- 点击确定后,得到每个D对应的F极值;若需要保留原数据的其他列,可继续:
- 回到原数据查询,点击「合并查询」,以
D为匹配键,和分组后的表合并 - 展开合并列中的
F最小值和F最大值,然后筛选原表的F等于最小值或最大值的行
- 回到原数据查询,点击「合并查询」,以
- 点击「关闭并上载」,将处理后的数据导出到Excel
二、Python Pandas 编程方案(适合大数据量或自动化处理)
import pandas as pd # 读取数据(替换为你的文件路径,支持Excel/CSV等格式) df = pd.read_excel("你的数据文件.xlsx") # 分组计算每个D对应的F的最大、最小值 grouped_stats = df.groupby('D')['F'].agg(['min', 'max']).reset_index() # 将统计结果转换为「D-F」的配对格式,每个D对应两个F值 matched_pairs = grouped_stats.melt(id_vars='D', value_name='F').drop(columns='variable') # 合并原数据,只保留符合条件的行 result_df = pd.merge(df, matched_pairs, on=['D', 'F']) # 保存处理后的数据 result_df.to_excel("处理后的数据.xlsx", index=False)
内容的提问来源于stack exchange,提问作者Dice 0ne
相关产品推荐
相关产品推荐

