如何在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
相关产品推荐
相关产品推荐

