You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用pandas按指定列去重并保留F列最大值同时保留其余列

问题根源

你当前的代码在groupby后调用max()仅提取了F列,自然会丢失其余列;且直接对全量分组结果取最大值,会将其他列也做最大值聚合,无法保留F取最大值行对应的原始列值。

可行解决方案

推荐两种可直接落地的实现方式,均可保留所有原始列:

方法1:排序后去重(逻辑更直观)

先对数据按分组键和F列降序排序,让每个分组内F最大的行排在最前,再按分组键去重保留首行即可:

import pandas as pd

df = pd.DataFrame(data)
# 保留你原有的时间转换逻辑
df['E'] = pd.to_datetime(df['E'], unit='ms').dt.date
# 按A、C分组,组内按F降序排序
df_sorted = df.sort_values(by=['A', 'C', 'F'], ascending=[True, True, False])
# 按A、C去重,保留F最大的第一行
df_result = df_sorted.drop_duplicates(subset=['A', 'C'], keep='first').reset_index(drop=True)

方法2:分组掩码筛选

通过transform生成每个分组内F等于最大值的布尔掩码,直接筛选符合条件的行:

import pandas as pd

df = pd.DataFrame(data)
df['E'] = pd.to_datetime(df['E'], unit='ms').dt.date
# 生成每个[A,C]分组内F为最大值的掩码
max_f_mask = df['F'] == df.groupby(['A', 'C'])['F'].transform('max')
# 筛选符合条件的行
df_result = df[max_f_mask].reset_index(drop=True)
补充说明

如果同一个[A,C]分组内存在多行F值同为最大值的情况,两种方法都会保留所有符合条件的行,不会额外过滤。

内容的提问来源于stack exchange,提问作者Rebecca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:06:02