Python中groupby聚合mean后如何用round限制小数位数?
解决方法:在GroupBy均值计算中结合round函数
嗨,我来帮你搞定这个小数位数的问题!这里有几种简单的方法可以把round()和mean()结合起来,轻松把price列的均值限制为两位小数:
方法1:先计算均值,再单独处理price列
这种方法最直观,先按body-style分组计算所有列的均值,之后再对price列应用round():
# 先分组计算均值 grouped_test_bodystyle = df_gptest2.groupby(['body-style'], as_index=False).mean() # 对price列保留两位小数 grouped_test_bodystyle['price'] = grouped_test_bodystyle['price'].round(2)
方法2:分组时直接用agg指定计算规则(更高效)
如果不想多一步操作,可以在分组聚合的时候,直接对price列定义“先求均值再保留两位小数”的规则,用agg()方法实现:
grouped_test_bodystyle = df_gptest2.groupby(['body-style'], as_index=False).agg( price=('price', lambda col: round(col.mean(), 2)) )
这里用了命名聚合(named aggregation),price=('price', ...)里第一个price是结果列的名称,第二个是原数据中的列名,lambda函数完成“均值+四舍五入”的组合操作。
如果还有其他列需要同样处理,直接扩展agg的参数即可:
grouped_test_bodystyle = df_gptest2.groupby(['body-style'], as_index=False).agg( price=('price', lambda x: round(x.mean(), 2)), horsepower=('horsepower', lambda x: round(x.mean(), 2)) )
小提示
- 方法2更高效,因为它只在聚合阶段处理需要的列,避免了对所有列先计算均值再处理的额外开销。
round()的参数2就是你要保留的小数位数,要是需要其他位数,直接改这个数字就行。
内容的提问来源于stack exchange,提问作者Janneman
相关产品推荐
相关产品推荐

