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

如何在pandas中拆分数据集?分组后返回全部列问题求解

问题原因

你当前的代码只是指定了分组依据的3个字段,并没有对分组后要保留的字段做筛选,grouped_df.head()默认返回每个分组前5行的全量列数据,因此返回原表所有11列属于正常结果,不属于代码错误,只是不符合你拆分后只保留特定列的预期。

符合需求的实现方案

根据你的使用场景可以选择以下实现方式:

  • 仅保留分组键对应列:
    调整分组时的列筛选逻辑即可,后续调用grouped_df.head()只会返回指定的3个分组列:
    grouped_df = df.groupby(['Column_1','Column_2','Column_4'])[['Column_1','Column_2','Column_4']]
    grouped_df.head()
    
  • 保留分组键+其他指定分析列:
    只需要在列索引列表中加入需要的列名即可,示例如下:
    # 示例中额外保留Column_3、Column_6用于后续分析
    grouped_df = df.groupby(['Column_1','Column_2','Column_4'])[['Column_1','Column_2','Column_4','Column_3','Column_6']]
    grouped_df.head()
    
  • 需要拆分每个分组为独立DataFrame后续调用:
    可以直接遍历分组对象生成字典,不用调用head方法限制行数:
    grouped = df.groupby(['Column_1','Column_2','Column_4'])
    # 字典的键为分组键组成的元组,值为对应分组的完整DataFrame
    group_dict = {group_key: group_df for group_key, group_df in grouped}
    # 调用示例:取Column_1为"类别1"、Column_2为"类型A"、Column_4为"等级2"的分组数据
    target_df = group_dict[("类别1", "类型A", "等级2")]
    
补充说明

groupby.head(n)的核心作用是返回每个分组的前n行全列数据,如果你不需要限制每个分组返回的行数,只是想拿到完整的分组数据做后续分析,不需要调用head方法,直接操作分组对象即可。

内容的提问来源于stack exchange,提问作者Learnasyougo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:36:02