# 4.3.3 分组后的数据转换

分组后的数据转换，是指用数据框（DataFrame）的 `groupby()` 完成分组之后，再通过数据转换来修改或生成新的数据。本节的实现方法是 `transform()` 函数。参数为操作名字符串。功能是：将操作应用到每一个分组，转换后返回一个序列（Series）。与上一节 `agg` 把每个组压成一行汇总不同，`transform()` 会把每个分组转换后的结果应用回原始数据框的相应位置，因此返回序列的长度和行标签都与原数据框一致。

课程沿用销售业绩数据框（列：姓名、分区、一季度～四季度；8 人分属天河、黄埔、越秀）。先执行 `group = df.groupby('分区')`，再从分组对象中取出列后转换：`group['四季度'].transform('mean')`，用于计算各区四季度的平均值。输出是长度为 8、名为「四季度」的序列：行标签 0～7 依次约为 2890.666667、3143.666667、2836.500000、3143.666667、2890.666667、2890.666667、3143.666667、2836.500000。同一分区的人得到同一个组均值：标签 0、4、5（赵四、周金、吴达）对应天河四季度均值 2890.666667，由原始值 2672、4066、1934 平均得到；标签 1、3、6（钱多、李萌、郑华）对应黄埔 3143.666667；标签 2、7（孙冰、王军）对应越秀 2836.5。

易错点：必须先 `groupby` 得到分组对象，再按列调用 `transform`，课程写法是 `group['四季度'].transform('mean')`，参数是操作名字符串。`transform` 返回序列，不要与 `agg`（每组一行、以分区为行索引）混淆。转换结果不会自动改写原数据框，需要赋值才能作为新列保存。同一组内各行的转换值相同，行标签保持为原始位置（本例仍为 0～7），不会按组重建。

## 关键要点
- 分组后可用数据转换修改或生成新数据，实现方法是 `transform()` 函数。
- 参数为操作名字符串，如 `'mean'`。
- 将操作应用到每一个分组，转换后返回一个序列。
- 每个分组数据在转换后会被应用回原始数据框的相应位置。
- 示例：`group['四季度'].transform('mean')` 计算各区四季度平均值。
- 天河（标签 0、4、5）均值 2890.666667；黄埔（1、3、6）为 3143.666667；越秀（2、7）为 2836.5。
- 不要与 `agg` 混淆：`agg` 每组一行，`transform` 对齐回原始各行。
