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

基于Pandas DataFrame筛选指定列匹配且某列值最大的行并导出CSV

解决Pandas DataFrame分组保留最大值行的问题

嘿,这个需求我之前做数据清理的时候经常碰到,用Pandas的分组和筛选操作就能完美搞定!下面一步步给你讲清楚怎么做:

核心思路

我们需要先按第1列(文本)和第6列(整数)的组合值分组,然后在每个分组里只保留第3列数值最大的那一行,最后把结果导出到新CSV文件。

具体实现方法

这里给你两种常用的方法,你可以根据自己的习惯选择:

方法一:用groupby + idxmax(最直接)

这种方法先找到每组中第3列最大值对应的行索引,再通过索引提取目标行:

import pandas as pd

# 1. 加载原始数据
df = pd.read_csv("你的输入文件.csv")

# 2. 按第1列(0索引对应df.columns[0])和第6列(df.columns[5])分组,取第3列(df.columns[2])最大值的行索引
max_row_indices = df.groupby([df.columns[0], df.columns[5]])[df.columns[2]].idxmax()

# 3. 根据索引筛选出目标行
filtered_df = df.loc[max_row_indices]

# 4. 导出到新CSV(index=False表示不保存行索引)
filtered_df.to_csv("筛选后的结果.csv", index=False)

方法二:用sort_values + drop_duplicates(更灵活)

如果需要处理「多组行第3列值相同且都是最大值」的情况,这种方法可以更灵活地控制保留哪一行:

import pandas as pd

df = pd.read_csv("你的输入文件.csv")

# 1. 先按分组键(第1、6列)升序排,再按第3列降序排(让最大值行排在每组最前面)
sorted_df = df.sort_values(
    by=[df.columns[0], df.columns[5], df.columns[2]],
    ascending=[True, True, False]
)

# 2. 按分组键去重,只保留每组的第一行(也就是第3列最大的行)
# 要是想保留最后一个最大值行,把keep='first'改成keep='last'就行
filtered_df = sorted_df.drop_duplicates(subset=[df.columns[0], df.columns[5]], keep="first")

# 3. 导出结果
filtered_df.to_csv("筛选后的结果.csv", index=False)

示例验证

比如你提到的场景:

行0的第1列(spam)和第6列(6)与行4、行6的对应列取值匹配,而行4的第3列取值(221)大于行0和行6的

用上面的代码处理后,这个分组里只会保留行4,其他两行会被过滤掉,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:46:55