Pandas 1.0.5版本中groupby().count()后使用命名聚合报错的解决方案求助
在Pandas 1.0.5版本里,你遇到的TypeError是因为当时的DataFrame.agg()还不支持通过关键字参数(比如Max=('B','max'))来实现命名聚合——这种语法是在后续版本(比如1.1.0及以上)才引入的。而你是在groupby().count()生成的DataFrame上调用agg,所以触发了错误。
给你几个更简洁的实现方式,都能得到你想要的输出格式:
方法一:直接分组统计大小,构造结果
这是最直观高效的方式,用groupby.size()直接获取每个组的行数,然后提取最大值和对应的组名:
np.random.seed(42) y = np.random.randint(0,5,size=(100, 2)) df = pd.DataFrame(y, columns=list('AB')) # 统计每个组的行数 group_sizes = df.groupby('A').size() # 构造目标DataFrame result = pd.DataFrame({ 'Max': [group_sizes.max()], 'ID': [group_sizes.idxmax()] })
输出:
Max ID 0 28 3
方法二:用字典形式的agg(适配旧版本)
如果你更倾向于用agg操作,可以在DataFrame.agg()里传递字典参数,再调整格式:
np.random.seed(42) y = np.random.randint(0,5,size=(100, 2)) df = pd.DataFrame(y, columns=list('AB')) result = df.groupby('A').count().agg({ 'B': ['max', 'idxmax'] }).rename(columns={'max': 'Max', 'idxmax': 'ID'}).reset_index(drop=True)
这个方法比你原来的变通方案少了转置操作,更简洁。
为什么你的原代码报错?
在Pandas 1.0.5中,GroupBy.agg()支持命名聚合(关键字参数形式),但DataFrame.agg()不支持——你是在groupby().count()得到的DataFrame上调用agg,所以不能用Max=('B','max')这种语法。如果要在groupby阶段直接用命名聚合,可以这样写(不过最后还是需要调整格式):
temp = df.groupby('A').agg(group_count=('B', 'count')) result = pd.DataFrame({ 'Max': [temp['group_count'].max()], 'ID': [temp['group_count'].idxmax()] })
对比下来,方法一的代码最简洁,逻辑也最清晰,推荐使用。
内容的提问来源于stack exchange,提问作者Data
相关产品推荐
相关产品推荐

