Python Pandas构建频数分布表 基于groupby分组的实操疑问
Pandas分组生成目标频数统计的实现方法
你最初考虑的groupby按Balances列分组的思路完全正确,无需拆分多步操作,直接搭配聚合函数即可一次性生成符合要求的统计结果。
第一步:复现示例数据
先导入pandas并按照你给出的数值构造原始DataFrame,验证后续计算逻辑:
import pandas as pd df = pd.DataFrame({ "Balances": [10, 11, 12, 13, 10, 13], "Weight": [7, 15, 30, 20, 15, 20] })
第二步:分组聚合生成目标表
利用agg方法,一次性指定每类统计指标的计算规则,不需要重复执行分组操作:
result = df.groupby("Balances").agg( Balances出现频次=("Balances", "count"), Weight最小值=("Weight", "min"), Weight最大值=("Weight", "max"), Weight平均值=("Weight", "mean") ).reset_index()
计算结果说明
运行后得到的统计表结构完全匹配你的需求,对应数值如下:
| Balances | Balances出现频次 | Weight最小值 | Weight最大值 | Weight平均值 |
|---|---|---|---|---|
| 10 | 2 | 7 | 15 | 11.0 |
| 11 | 1 | 15 | 15 | 15.0 |
| 12 | 1 | 30 | 30 | 30.0 |
| 13 | 2 | 20 | 20 | 20.0 |
新手易踩的注意点
groupby执行后默认会将分组列设为表索引,搭配.reset_index()可以将Balances还原为普通数据列,避免后续操作出现索引层级混乱- 分组时填写的列名必须和实际DataFrame的列名完全匹配,注意大小写差异(比如你提到的
balances和示例中的Balances不一致时会触发列不存在的报错) - 如果不需要自定义列名,也可以用简写聚合写法实现相同计算:
df.groupby("Balances")["Weight"].agg(["count", "min", "max", "mean"]).reset_index(),得到的数值结果完全一致,仅列名为默认的函数名,可按需后续修改列名。
内容的提问来源于stack exchange,提问作者Croyd
相关产品推荐
相关产品推荐

