如何在Python中筛选Pandas DataFrame分组内P值最大的行?
Pandas按组保留P值最大行的实现方法
首先先构造你提供的示例DataFrame:
import pandas as pd df = pd.DataFrame({ 'ind': [0, 1, 2, 3], 'SID': [1, 1, 1, 1], 'SEMID': [5, 5, 5, 3], 'TID': [450, 451, 452, 455], 'TYP': ['A', 'A', 'A', 'A'], 'P': [10, 9, 15, 2] })
下面提供两种适合新手的实现方式:
方法一:使用groupby + idxmax
这种方法直接定位每组中P值最大的行的索引,再筛选原数据:
# 按分组键(SID、SEMID、TYP)分组,获取每组P列最大值对应的行索引 max_p_idx = df.groupby(['SID', 'SEMID', 'TYP'])['P'].idxmax() # 根据索引提取目标行 result = df.loc[max_p_idx] # 可选:重置索引让输出更整洁 result = result.reset_index(drop=True)
方法二:排序后去重
通过先排序再去重的方式,保留每组中P值最大的行,逻辑更直观:
# 按分组键升序、P值降序排序,确保每组中P最大的行排在最前面 sorted_df = df.sort_values(by=['SID', 'SEMID', 'TYP', 'P'], ascending=[True, True, True, False]) # 按分组键去重,只保留每组的第一行(即P最大的行) result = sorted_df.drop_duplicates(subset=['SID', 'SEMID', 'TYP'], keep='first') # 可选:重置索引 result = result.reset_index(drop=True)
两种方法最终都会得到你期望的输出结果。
内容的提问来源于stack exchange,提问作者Saddaf Afrin Khan
相关产品推荐
相关产品推荐

