如何在Pandas中通过一次groupby同时计算不同宠物类型的平均年龄及对应家庭占比
当然可以通过一次groupby操作同时算出这两个指标!我来给你具体演示怎么实现:
首先,我们先明确两个指标的计算逻辑:
- 每种宠物类型的平均年龄:直接对该类型下的所有
age取平均值 - 饲养每种宠物类型的家庭占比:先统计养该类型宠物的不同家庭数量,再除以总家庭数
基于这个逻辑,我们可以用groupby结合agg()方法,在一次操作里完成两个聚合计算,代码如下:
import pandas as pd # 先构造你提供的DataFrame pets = pd.DataFrame.from_dict( {'Izzy':['Smith','cat',1], 'Lynx':['Smith','cat',9], 'Oreo':['Smith','dog',7], 'Archie':['Mack','dog',3], 'Prim':['Mack','cat',1], 'Fern':['Somers','cat',12]}, orient='index' ) pets.columns=['family', 'type','age'] # 计算总家庭数 total_families = pets['family'].nunique() # 一次groupby完成两个指标计算 result = pets.groupby('type').agg( avg_age=('age', 'mean'), # 计算平均年龄 family_share=('family', lambda x: x.nunique() / total_families) # 计算家庭占比 ).round(2) # 保留两位小数,方便查看 print(result)
运行这段代码后,你会得到如下结果:
avg_age family_share type cat 5.75 1.00 dog 5.00 0.67
完全符合你想要的结果:猫的平均年龄5.75,家庭占比100%;狗的平均年龄5.00,家庭占比67%。
这里的核心是agg()方法的灵活运用——它允许我们为不同的聚合需求指定对应的列和操作,甚至可以用lambda函数实现自定义的聚合逻辑,完美实现一次groupby完成多指标计算的需求。
内容的提问来源于stack exchange,提问作者Ruth Smith
相关产品推荐
相关产品推荐

