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

如何在Python中按多列分组对列表最后一列求和?

实现多列分组对最后一列求和的Python方案

当然可以用Python实现这个需求!针对这种多列分组、最后一列求和的场景,我给你分享两个实用的方案,分别适合不同的场景:

方法一:用标准库collections.defaultdict(无需额外安装依赖)

这个方法用Python自带的标准库就能搞定,原理清晰,适合小数据集或者不想引入第三方库的场景:

核心思路是:把除最后一列外的所有列作为分组的「键」(因为列表不能作为字典的键,所以转成元组),然后遍历原始数据,累加每个分组对应的最后一列数值。

from collections import defaultdict

# 你的原始数据
data = [['Andrew', '1', '9'], ['Peter', '1', '10'], ['Andrew', '1', '8'], ['Peter', '1', '11'], ['Sam', '4', '9'], ['Andrew', '2', '2']]
# 初始化一个默认值为0的字典,用来存每个分组的总和
result_dict = defaultdict(int)

for item in data:
    # 取前n-1列作为分组键,转成元组(列表不可哈希,不能当字典键)
    group_key = tuple(item[:-1])
    # 把最后一列转成整数,累加到对应分组的总和里
    result_dict[group_key] += int(item[-1])

# 把字典转换成你需要的列表格式
final_result = [list(key) + [str(total)] for key, total in result_dict.items()]
print(final_result)
# 输出:[['Andrew', '1', '17'], ['Peter', '1', '21'], ['Sam', '4', '9'], ['Andrew', '2', '2']]

这个方法的好处是完全不需要额外安装库,而且逻辑一目了然,就算是新手也能快速理解。

方法二:用pandas(适合大规模数据或复杂数据处理)

如果你的数据量很大,或者需要做更复杂的分组聚合操作,用pandas会更高效、更简洁:

import pandas as pd

# 你的原始数据
data = [['Andrew', '1', '9'], ['Peter', '1', '10'], ['Andrew', '1', '8'], ['Peter', '1', '11'], ['Sam', '4', '9'], ['Andrew', '2', '2']]
# 把数据转换成DataFrame格式
df = pd.DataFrame(data, columns=['name', 'group_col', 'value'])
# 把最后一列转成数值类型(否则会按字符串拼接,不是求和)
df['value'] = df['value'].astype(int)

# 按前两列分组,对最后一列求和,然后重置索引
grouped_df = df.groupby(['name', 'group_col'])['value'].sum().reset_index()

# 转换成你需要的列表格式,如果需要把数值转回字符串,可以加.astype(str)
final_result = grouped_df.values.tolist()
# 或者转成带字符串的结果:final_result = grouped_df.astype(str).values.tolist()
print(final_result)
# 输出:[['Andrew', '1', 17], ['Andrew', '2', 2], ['Peter', '1', 21], ['Sam', '4', 9]]

pandas的优势在于处理大规模数据时性能远超纯Python循环,而且语法非常直观,后续如果要扩展其他聚合操作(比如求均值、计数)也非常方便。

额外提示

不管用哪种方法,都要注意:

  • 最后一列必须转成数值类型(int/float)再求和,不然会变成字符串拼接(比如'9'+'8'会得到'98'而不是17)
  • 分组的键必须是可哈希的类型(比如元组、字符串),所以要把列表形式的分组列转成元组(像方法一里那样)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:35:58