如何根据mat_source列的值分组求和length列
解决方案
先整理示例数据为可阅读的Markdown表格:
| asset_ID | length | age | mat_source | con_num |
|---|---|---|---|---|
| 1 | 500 | 6.00000 | ark | 1 |
| 2 | 170 | 6.00000 | bg | 1 |
| 3 | 480 | 9.00000 | brnl | 2 |
| 4 | 284 | 10.00000 | brnl | 2 |
| 5 | 30 | 4.00000 | bg | 3 |
| 6 | 500 | 3.09589 | brnl | 1 |
| 7 | 270 | 6.79726 | brnl | 4 |
| 8 | 476 | 3.00000 | ark | 4 |
| 9 | 395 | 5.00000 | brnl | 1 |
| 10 | 80 | 18.90411 | ark | 2 |
| 11 | 500 | 14.00000 | brnl | 1 |
| 12 | 500 | 6.00000 | ark | 1 |
| 13 | 500 | 22.00000 | ark | 4 |
| 14 | 110 | 2.00000 | brnl | 3 |
| 15 | 500 | 14.00000 | brnl | 1 |
| 16 | 363 | 2.00000 | brnl | 4 |
一、指定单个mat_source值求和
Excel实现
使用SUMIF函数,语法为SUMIF(条件区域, 指定值, 求和区域)。以计算mat_source为ark的length总和为例:
=SUMIF(D:D, "ark", B:B)
计算结果为:2056
Python Pandas实现
先构造DataFrame,再通过布尔索引筛选后求和:
import pandas as pd # 构建示例数据 df = pd.DataFrame({ 'asset_ID': [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16], 'length': [500,170,480,284,30,500,270,476,395,80,500,500,500,110,500,363], 'age': [6.0,6.0,9.0,10.0,4.0,3.09589,6.79726,3.0,5.0,18.90411,14.0,6.0,22.0,2.0,14.0,2.0], 'mat_source': ['ark','bg','brnl','brnl','bg','brnl','brnl','ark','brnl','ark','brnl','ark','ark','brnl','brnl','brnl'], 'con_num': [1,1,2,2,3,1,4,4,1,2,1,1,4,3,1,4] }) # 计算指定值的总和 target_value = 'ark' sum_result = df[df['mat_source'] == target_value]['length'].sum() print(sum_result) # 输出2056
二、对所有mat_source不同值分别求和
Excel实现
方法1:数据透视表
- 选中数据区域,点击「插入」→「数据透视表」
- 将
mat_source拖到「行」区域,length拖到「值」区域(默认求和) - 自动生成各分组的
length总和
方法2:UNIQUE+SUMIF组合(Excel 365及以上)
- 在空白单元格输入
=UNIQUE(D:D),获取所有唯一的mat_source值 - 在旁边单元格输入
=SUMIF(D:D, E2, B:B),下拉填充得到每个值的总和
Python Pandas实现
使用groupby分组求和,一行代码完成:
grouped_sum = df.groupby('mat_source')['length'].sum() print(grouped_sum)
输出结果:
mat_source ark 2056 bg 200 brnl 3302 Name: length, dtype: int64
内容的提问来源于stack exchange,提问作者Natalie Storm
相关产品推荐
相关产品推荐

