如何根据分组列的最后一个值对 DataFrame 进行二次分组-Python教程

本文介绍如何先按某一列(如 ‘y’)分组,再基于每组中指定列(如 ‘x’)的最后一个值进行聚合分组,从而实现动态、无需预知分组键的嵌套式分组逻辑。

在 Pandas 数据分析中,有时需要按“组内某个特征的最终状态”进行再分组——例如:按用户会话(y)分组后,进一步将所有以相同操作(x 的最后一行值)结尾的会话归为一类。这种需求无法通过单层 groupby(‘y’) 直接满足,而需构造一个基于组内末行值的新分组键。

以下以原始数据为例:

import pandas as pd

df = pd.DataFrame({
    'x': ['a', 'b', 'c', 'c', 'e', 'f', 'd', 'a', 'b', 'c', 'c', 'e', 'f', 'd'],
    'y': ['a', 'a', 'a', 'a', 'b', 'b', 'b', 'f', 'f', 'f', 'f', 'g', 'g', 'g'],
})

目标是:

  • 先按 ‘y’ 分组(共 4 组:y=’a’, ‘b’, ‘f’, ‘g’);
  • 提取每组中 ‘x’ 列的最后一个值(即 y=’a’ 组末行为 ‘c’,y=’b’ 组末行为 ‘d’,依此类推);
  • 再按这些“组末 x 值”(如 ‘c’, ‘d’)统一聚类,得到两个大组。

✅ 推荐方案:使用 groupby().transform(‘last’)

最清晰、可读性强且健壮的方式是借助 transform(‘last’) 构造辅助列:

# 步骤1:按 'y' 分组,提取每组 'x' 的最后一个值,广播到该组所有行
last_x_per_y = df.groupby('y')['x'].transform('last')

# 步骤2:按此新列再次分组
for last_val, group in df.groupby(last_x_per_y):
    print(f"\nGroup where last 'x' in 'y'-group is: '{last_val}'")
    print(group)

输出:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » 如何根据分组列的最后一个值对 DataFrame 进行二次分组-Python教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1394+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4039475+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1394+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4039475+
  • 本周更新: 0+
  • 最后更新: 2026-03-16