如何使用Pandas按Area列分组聚合求和并保留其余列的值
实现方案
你可以通过pandas的groupby+agg方法实现需求,按Area列分组后,对数值列执行求和操作,非数值列取分组内的统一值即可:
方法1:手动指定聚合规则(适合列数较少的场景)
import pandas as pd # 测试数据集 test = pd.DataFrame({'Area': ['Tipperary','Tipperary','Cork','Dublin'], 'Deaths': [11,33,44,55], 'Year': [2007,2007,2007,2008]} ) # 分组聚合操作 result = test.groupby('Area', as_index=False).agg({ 'Deaths': 'sum', # 数值列 Deaths 求和 'Year': 'first' # 非数值列 Year 取分组内第一个值(同分组下Year值统一) })
方法2:自动识别列类型生成聚合规则(适合大规模多列场景)
如果数据列数很多,手动指定规则效率低,可以自动区分数值列和非数值列匹配聚合逻辑:
agg_rules = {} for col in test.columns: # 跳过分组键Area if col == 'Area': continue # 数值列执行求和 if pd.api.types.is_numeric_dtype(test[col]): agg_rules[col] = 'sum' # 非数值列取分组内第一个值 else: agg_rules[col] = 'first' result = test.groupby('Area', as_index=False).agg(agg_rules)
输出结果
最终得到的聚合结果如下:
| Area | Deaths | Year |
|---|---|---|
| Cork | 44 | 2007 |
| Dublin | 55 | 2008 |
| Tipperary | 44 | 2007 |
注意:如果实际场景中同一个Area分组下的非数值列存在不同取值,可以根据业务需要将
first替换为max、last等其他聚合规则。
内容的提问来源于stack exchange,提问作者user16805952
相关产品推荐
相关产品推荐

