Pandas按ColA分组后优先取Result、Freq最大值的实现问题
解决方法
你之前使用groupby().max()无法得到预期结果的原因是:该方法会对分组内的每一列单独计算最大值,而非提取符合多列优先级条件的完整行,比如ColB列会返回分组内字符串排序最大的值,和Result、Freq最大值对应的行没有关联。
你可以使用以下两种方式实现需求:
方法1:排序后分组取首行
先按照优先级对全表降序排序,再按COlA分组取每组第一行即可:
# 按Result降序、Freq降序排序,优先级高的规则排在前面 df_sorted = df.sort_values(by=['Result', 'Freq'], ascending=[False, False]) # 分组取每组首行,重置索引 res = df_sorted.groupby('COlA').head(1).reset_index(drop=True)
方法2:分组内直接取符合优先级的最大行
用groupby.apply配合nlargest直接在分组内按多列优先级取行:
res = df.groupby('COlA', group_keys=False).apply( lambda x: x.nlargest(1, columns=['Result', 'Freq']) ).reset_index(drop=True)
两种方法都可以得到你需要的预期输出。
内容的提问来源于stack exchange,提问作者Ash
相关产品推荐
相关产品推荐

