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

如何用更Pythonic的方式在Pandas中按除columnK外的列分组求和columnK?

问题描述

我有一个包含columnA至columnM的DataFrame,数据示例如下:

columnA columnB .... columnK columnL columnM
A        AA     ....  10       AAA    AAAA
A        AA     ....  20       AAA    AAAA
B        BB     ....  5        BBB    BBBB
A        BB     ....  40       AAA    AAAA
...

我希望对该DataFrame进行分组操作:按除columnK外的所有列分组,对columnK列计算求和值,最终得到如下输出:

columnA columnB .... columnK columnL columnM
A        AA     ....  30       AAA    AAAA
B        BB     ....  5        BBB    BBBB
A        BB     ....  40       AAA    AAAA
...

我知道可以手动执行以下命令:

df.groupby(['columnA', 'columnB',...,'columnL', 'columnM'])['columnK'].sum().reset_index()

也就是在groupby中显式排除columnK,但有没有更Pythonic的实现方式?

解决方案

当然有几种更简洁、更符合Python风格的写法,不用手动罗列所有排除columnK的列:

  • 列表推导式生成分组列
    直接从DataFrame的列名集合中过滤掉columnK,这种方式更灵活,哪怕后续DataFrame的列名有变动,也不用修改分组列的列表:
group_cols = [col for col in df.columns if col != 'columnK']
result = df.groupby(group_cols)['columnK'].sum().reset_index()
  • 使用columns.drop()方法
    利用Pandas提供的df.columns.drop()方法直接移除指定列,写法更紧凑:
result = df.groupby(df.columns.drop('columnK'))['columnK'].sum().reset_index()

这两种方式都能达到和手动指定分组列完全一致的效果,尤其当DataFrame列数较多时,优势会非常明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:50:59