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

如何在DataFrame分组聚合中统计最大值的出现次数?

按分组获取最大值及该最大值的出现次数

原始数据

原始DataFrame结构如下:

Column1Column2
John2
John8
John8
John8
Robert5
Robert5
Robert1
Carl8
Carl7

需求

按Column1分组聚合,获取每组的最大值,同时统计该最大值在组内的出现次数,期望输出:

Column1MaxCount_of_Max
John83
Robert52
Carl81

原代码问题

你写的自定义函数Max_Count没必要重新通过df.loc[x.index]从原DataFrame取数,因为x本身就是分组后的Column2系列;同时原代码聚合后会生成多层列索引,需要调整列命名逻辑。

解决方案

方法一:改进自定义聚合函数

直接基于分组后的系列操作,同时指定聚合后的列名:

import pandas as pd

# 构造原始数据
data = {
    'Column1': ['John', 'John', 'John', 'John', 'Robert', 'Robert', 'Robert', 'Carl', 'Carl'],
    'Column2': [2, 8, 8, 8, 5, 5, 1, 8, 7]
}
df = pd.DataFrame(data)

def max_count(x):
    max_val = x.max()
    return x[x == max_val].count()

# 执行聚合并设置列名
result = df.groupby('Column1')['Column2'].agg(Max='max', Count_of_Max=max_count).reset_index()
print(result)

方法二:分步处理(无自定义函数)

先计算每组最大值,再合并回原数据统计次数,大数据量下性能更优:

import pandas as pd

data = {
    'Column1': ['John', 'John', 'John', 'John', 'Robert', 'Robert', 'Robert', 'Carl', 'Carl'],
    'Column2': [2, 8, 8, 8, 5, 5, 1, 8, 7]
}
df = pd.DataFrame(data)

# 第一步:计算每组最大值
group_max = df.groupby('Column1')['Column2'].max().reset_index(name='Max')
# 第二步:合并数据并统计最大值出现次数
merged = df.merge(group_max, on='Column1')
result = merged[merged['Column2'] == merged['Max']].groupby('Column1').agg(
    Max=('Max', 'first'),
    Count_of_Max=('Column2', 'count')
).reset_index()
print(result)

方法三:使用transform简化操作

通过transform将每组最大值广播到原数据每一行,直接筛选统计:

import pandas as pd

data = {
    'Column1': ['John', 'John', 'John', 'John', 'Robert', 'Robert', 'Robert', 'Carl', 'Carl'],
    'Column2': [2, 8, 8, 8, 5, 5, 1, 8, 7]
}
df = pd.DataFrame(data)

# 添加每组最大值列
df['Max'] = df.groupby('Column1')['Column2'].transform('max')
# 筛选最大值行并分组统计
result = df[df['Column2'] == df['Max']].groupby('Column1').agg(
    Max=('Max', 'first'),
    Count_of_Max=('Column2', 'count')
).reset_index()
print(result)

以上三种方法均可得到预期输出,其中方法二、三避免了自定义聚合函数,在数据量较大时执行效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:16:21