分组简介
在本节课中,你将学习如何在 Pandas 中对相关项目进行分组。
概念
能够将 DataFrames 按一个或多个列进行分组或分割,是任何数据分析应用的核心功能之一。因此,这很可能出现在数据分析师的面试或实际任务中。
其核心思想是将一个 DataFrame 划分为多个组,以便对每个组分别进行分析。
语法
回顾一下,语法非常简单:
df.groupby(<列名>),或者在按多列分组时使用 df.groupby([<列1>, <列2>, ...])。
可以在 DataFrameGroupBy 对象上应用聚合操作或 apply 函数,然后通过 reset_index() 将结果重置为普通的 DataFrame。
旅行数据集
思路
在你的旅行数据集中,不同旅客的行为可能并不一致。某些国籍的旅客可能更倾向于前往特定目的地,而其他国籍的旅客则偏好不同的目的地。
此时,你的分组列应为 nationality(国籍),你将分析每种国籍对应的 destination(目的地)分布情况。你可能需要找出最常见的目的地,或统计每个国籍的唯一目的地数量。这有助于制定针对“国家-目的地”组合的营销策略。
另一个例子是:某些旅游套餐在特定天气条件下更受欢迎,例如夏季的邮轮旅行。
此时,你的分组列应为 tour_type(旅游类型),你将分析不同旅游类型在各季节的分布情况。
在面试中,理解业务背景和应用场景至关重要。因此,你很可能会基于代表业务核心模型的关键属性进行分组或筛选。
在本例中,核心模型是“旅客”和“行程”。在此处停下来思考一下:哪些属性可能影响旅客的行为?我们已经讨论了 nationality、destination、tour_type 和 season。你能想到其他核心属性吗?
面试常见问题
你可能会被问到开放性问题,例如:
- 如何根据旅客的人口统计特征、个人特质或过往行程,为老客户定制半个性化的新闻通讯?
一种解决方案是:根据旅客最显著的特征对他们进行分组,然后向他们推荐可能感兴趣的其他行程。
医疗数据集
思路
在你的医疗数据集中,患者具有不同的健康状况,并接受不同的治疗方案。患有心脏病的患者可能表现出不同的症状,服用特定药物,且多属于某一特定人口群体。
你可能希望分析 糖尿病 状况与其他人口统计信息之间的关联,以及最常使用的治疗方式。这有助于针对高风险患者群体开展健康宣传。
此时,一个明显的分组列是 health_condition(健康状况),基于此可以分析 age(年龄)、gender(性别)、weight(体重)、treatments(治疗方案)等变量。
面试常见问题
你可能会被问到开放性问题,例如:
- 在各个年龄段(儿童、青少年、年轻成人、成年人、老年人)中,最常见的健康问题是什么?
一种解决方法是:按年龄范围对患者进行分组,然后展示每组中最常见的2-3种健康问题。
在进入练习题之前
- 确保掌握使用单列或多列进行
groupby的方法。 - 确保掌握如何在
DataFrameGroupBy对象上应用agg函数。这包括对不同列应用聚合函数,以及了解可使用的各种聚合函数。 - 确保掌握如何使用
reset_index将结果转换回标准的DataFrame。