pandas DataFrame分组如何对不同列分别求均值和求和
Pandas 分组定制聚合实现方案
你可以直接使用groupby配套的agg()方法,给不同列单独指定聚合规则,不需要对所有列统一计算,具体实现如下:
完整实现代码
import pandas as pd # 构造示例数据集 df = pd.DataFrame({'ID': ['1a','1a','3a','4a','3a'], 'column_1': [10.6, 10.4, 10, 20, 20], 'column_2': [10, 20, 30, 40, 50] }) # 按ID分组,对不同列配置不同聚合逻辑 df_result = df.groupby('ID', as_index=False).agg( column_1=('column_1', 'mean'), # column_1计算均值 column_2=('column_2', 'sum') # column_2计算总和 ) print(df_result)
输出结果
ID column_1 column_2 0 1a 10.5 30 1 3a 15.0 80 2 4a 20.0 40
注:你给出的期望结果中ID为4a的column_2总和写为30属于笔误,原数据中ID=4a仅存在1条记录,column_2值为40,因此聚合结果为40。
参数说明
as_index=False:将分组字段ID作为普通数据列保留,不会被设置为DataFrame的行索引,和你预期的输出格式匹配。agg()内的参数格式为结果列名=(原列名, 聚合函数),除了内置的mean、sum之外,还支持count、max、min、median等内置统计函数,也支持传入自定义函数实现更复杂的计算逻辑。- 如果需要对同一列执行多种聚合计算,只需要新增对应配置即可,例如要同时计算column_1的均值和最大值,可以写成
column_1_mean=('column_1', 'mean'), column_1_max=('column_1', 'max')。
内容的提问来源于stack exchange,提问作者Jane Borges
相关产品推荐
相关产品推荐

