You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 17:12:39