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

如何修改pandas groupby+agg代码,使分组行显示指定字符串?

Pandas分组聚合:仅标记多行分组为"grouped"

我来帮你搞定这个需求,其实只需要调整一下聚合逻辑就能实现啦~先明确核心要求:只有原分组包含多行的类别,聚合后value列显示"grouped";原本只有一行的分组,直接保留它的value值。

先看你的初始数据:

import pandas as pd
df = pd.DataFrame([["a",1],["a",3],["b",2]], columns=['category','value'])

初始表格输出:

category  value
0        a      1
1        a      3
2        b      2

你期望的最终输出:

category    value
0        a  grouped
1        b        2

你的原代码是取每个分组的最大值,现在要替换成判断分组行数后的自定义结果,这里有两种简单的实现方式:

方法一:自定义聚合函数(最简洁)

直接在agg里用一个自定义函数,判断每个分组的行数,按需返回结果:

def mark_grouped(x):
    # 如果分组行数大于1,返回"grouped",否则返回唯一的value值
    return "grouped" if len(x) > 1 else x.iloc[0]

# 分组聚合
df_result = df.groupby(['category'], as_index=False).agg({'value': mark_grouped})
print(df_result)

这个方法把判断逻辑直接整合到聚合步骤里,一步到位,代码也很清晰。

方法二:分步处理(更直观)

如果觉得自定义函数有点抽象,可以拆分步骤,每一步逻辑都一目了然:

# 第一步:获取每个分组的max值(和你的原代码一致)
df_max = df.groupby(['category'], as_index=False).agg({'value':'max'})
# 第二步:获取每个分组的行数
df_group_size = df.groupby(['category'], as_index=False).size().rename(columns={'size': 'row_count'})
# 第三步:合并结果,根据行数判断替换value
df_result = pd.merge(df_max, df_group_size, on='category')
df_result['value'] = df_result.apply(lambda row: 'grouped' if row['row_count'] > 1 else row['value'], axis=1)
# 删掉辅助的row_count列
df_result = df_result.drop('row_count', axis=1)
print(df_result)

这种方式适合刚接触分组聚合的同学理解整个逻辑流程。

两种方法都能得到你想要的结果,按需选择就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:30:57