Pandas中利用pivot_tables同步实现分组计数与列平均值计算
Pandas 分组聚合实现双统计维度的具体方案
基于你已熟悉的pivot_table流程改造
你之前通过pivot_table按column2提取唯一值分组的操作,只需要在聚合环节补充column3的均值计算规则,无需额外拆分两次聚合,就能一步生成符合要求的最终结果。核心实现代码:
import pandas as pd # 对应示例的初始DataFrame结构 df = pd.DataFrame({ "column1": [123, 335, 456, 324, 232], "column2": ["-6.23,101.45", "-6.23,101.45", "-6.23,101.45", "-6.12,102.33", "-6.12,102.33"], "column3": [3, 4, 5, 10, 6] }) # 对齐你之前的pivot_table使用习惯,仅补充聚合规则 agg_result = pd.pivot_table( df, index="column2", # 和你之前提取column2唯一值的分组逻辑完全一致 values="column3", aggfunc=["count", "mean"], # 同步指定两个聚合动作:统计条目数、计算column3均值 ).reset_index() # 对齐示例输出的列名格式 agg_result.columns = ["column2", "count", "avg_column3"]
上述代码运行后输出的结果和你给出的预期示例完全匹配:
- 分组
-6.23,101.45的条目数为3,column3平均值为(3+4+5)/3=4 - 分组
-6.12,102.33的条目数为2,column3平均值为(10+6)/2=8
实用提示
- 如果
column2存在空值需要纳入分组统计,只需要在pivot_table调用中补充参数dropna=False,即可保留空值对应的分组条目 - 如果需要过滤聚合结果(比如只保留条目数大于1的分组),可以在生成的
agg_result基础上直接加条件筛选即可,和普通DataFrame的操作逻辑完全一致
轻量化替代方案(无需透视表逻辑)
如果不需要用到pivot_table的特殊透视能力,直接用分组聚合的命名写法可以更简洁地实现相同效果,且无需后续手动调整列名:
agg_result = df.groupby("column2", as_index=False).agg( count=("column3", "count"), avg_column3=("column3", "mean") )
内容的提问来源于stack exchange,提问作者muka lipan
相关产品推荐
相关产品推荐

