按两列分组聚合并存储结果至DataFrame的最优方法
按两列分组聚合并存储结果到DataFrame的最优方案
嘿,针对你这个要计算每个merk下各kleur对应的prijs平均值的需求,最推荐也是最高效的方式就是用pandas原生的groupby结合聚合方法——毕竟它专门针对大型数据集做了底层优化,不管是速度还是内存效率都比手动循环这类方法强太多。
核心实现代码
假设你的原始DataFrame名为df,一行代码就能搞定:
import pandas as pd # 分组计算均值并转为标准DataFrame occasions_prijs_df_gr = df.groupby(['merk', 'kleur'])['prijs'].mean().reset_index()
或者你也可以直接在groupby里设置as_index=False,省去后续的reset_index()步骤,代码更简洁:
occasions_prijs_df_gr = df.groupby(['merk', 'kleur'], as_index=False)['prijs'].mean()
为什么这是最优方案?
- 效率拉满:pandas的
groupby是C语言级别的底层实现,处理大型数据集时比Python层面的循环快几十甚至上百倍,内存占用也更合理。 - 灵活性强:如果之后需要扩展计算其他统计量(比如计数、总和),只需要修改聚合逻辑就行,比如:
# 同时计算均值和数量 result = df.groupby(['merk', 'kleur'], as_index=False)['prijs'].agg( gemiddelde_prijs='mean', aantal_voertuigen='count' ) - 结果格式友好:通过
reset_index()或者as_index=False,最终得到的是结构清晰的标准DataFrame,完全符合你预期的输出格式。
示例验证
假设你的原始数据是这样的:
| kleur | merk | prijs |
|---|---|---|
| rood | Ford | 20000 |
| blauw | Ford | 22000 |
| rood | Ford | 19000 |
| blauw | BMW | 35000 |
| rood | BMW | 32000 |
运行核心代码后,occasions_prijs_df_gr的输出会是:
| merk | kleur | prijs |
|---|---|---|
| BMW | blauw | 35000 |
| BMW | rood | 32000 |
| Ford | blauw | 22000 |
| Ford | rood | 19500 |
完全匹配你想要的每个品牌下各颜色的价格平均值需求。
内容的提问来源于stack exchange,提问作者YNR
相关产品推荐
相关产品推荐

