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

使用pandas多列分组取每组最大值对应行及计算其余行频率总和

解决方案

需求1:提取Feature+value分组中frequency最大的完整行

你之前写法的问题是直接调用max()会独立计算每列的最大值,无法保证返回的是同一行的数据,正确写法如下:

# 方法1:单最大值场景,每个分组仅取frequency最高的1行
max_freq_rows = df.loc[df.groupby(['Feature', 'value'])['frequency'].idxmax()].reset_index(drop=True)

如果分组内存在多个行frequency同为最大值,需要全部保留,用以下写法:

# 方法2:多最大值场景,保留所有frequency等于分组最大值的行
max_mask = df['frequency'] == df.groupby(['Feature', 'value'])['frequency'].transform('max')
max_freq_rows = df[max_mask].reset_index(drop=True)

两种方法返回的都是单层索引的普通DataFrame,不会出现多索引问题。

需求2:计算分组内除最大值行外的frequency总和

直接用分组总frequency减去分组最大frequency即可,无需单独筛选非最大值行求和,效率更高:

# 计算每个分组的总frequency和最大frequency
group_agg = df.groupby(['Feature', 'value'])['frequency'].agg(group_sum='sum', group_max='max').reset_index()
# 计算剩余行的frequency总和
group_agg['rest_frequency_sum'] = group_agg['group_sum'] - group_agg['group_max']

如果需要把这个统计值合并到之前的最大值行结果中,直接关联即可:

final_result = max_freq_rows.merge(group_agg[['Feature', 'value', 'rest_frequency_sum']], on=['Feature', 'value'], how='left')

以你举的示例验证:分组age_45_and_above-No总frequency为2700+1707+83=4490,减去最大值2700得到1790,和1707+83的计算结果完全一致。

注意事项

  • 代码中的字段名需和你的DataFrame实际字段大小写完全匹配,如果你实际使用的是大写的Value、Frequency,替换对应字段名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:45:02