基于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
相关产品推荐
相关产品推荐

