Pandas groupby.agg如何实现部分列保留原值其余列求和
你当前使用lambda x: x的写法无法生效的核心原因是:groupby后的每个分组对应列是一个Series对象,直接返回原Series的话,agg()无法将其自动解析为聚合后的单行值,因此会不符合预期。
正确实现方式
前提:若同一个ID分组下的Name、Phone取值唯一(这是“保留原值”的默认适配场景),直接使用first聚合函数即可,写法如下:
df.groupby('ID', as_index=False).agg({ 'Name': 'first', 'Income': 'sum', 'Phone': 'first' })
这里加as_index=False是为了让分组键ID保持为普通列,不会被转为索引,更符合常规使用习惯。
特殊场景适配
如果同一个ID下存在多个不同的Name/Phone取值,你希望全部保留的话,可以将对应列的聚合规则改为转为列表:
df.groupby('ID', as_index=False).agg({ 'Name': lambda x: x.tolist(), 'Income': 'sum', 'Phone': lambda x: x.tolist() })
内容的提问来源于stack exchange,提问作者Skittles
相关产品推荐
相关产品推荐

