如何对Pandas DataFrame的GroupBy对象跳过前n个组并保留GroupBy类型
如何跳过GroupBy对象的前n个组并保留GroupBy结构
嘿,我来帮你搞定这个问题!你已经用groupby("ID")完成了DataFrame的分组,但可惜GroupBy对象本身不支持像列表那样直接用[n:]切片来跳过前n个组。不过我们可以通过以下方法实现需求,而且能保证结果依然是GroupBy对象:
具体步骤
- 获取分组键列表:先提取所有分组的键,这个列表的顺序和原GroupBy对象的分组顺序完全一致
group_keys = list(df_grouped.groups.keys()) - 筛选目标分组键:根据你要跳过的前n个组,截取列表中从第n+1个开始的键
n = 2 # 这里替换成你实际要跳过的组数 selected_keys = group_keys[n:] - 生成新的GroupBy对象:用
filter方法筛选出仅包含目标键的分组,得到的结果就是我们需要的GroupBy对象df_grouped_skipped = df_grouped.filter(lambda x: x.name in selected_keys)
简洁写法
如果你想更紧凑一点,可以把步骤合并成一行代码:
n = 2 df_grouped_skipped = df_grouped.filter(lambda x: x.name in list(df_grouped.groups.keys())[n:])
验证效果
拿你的示例数据来说,执行完上述代码后,df_grouped_skipped.groups.keys()会返回dict_keys([6, 10]),完全符合你的预期。而且这个新对象依然是GroupBy类型,你可以继续对它进行分组后的各种操作(比如聚合、遍历分组等)。
小提醒:如果你的分组是带排序的(比如groupby("ID", sort=True)),那group_keys会是排序后的键列表,跳过前n个组也会按照排序后的顺序来执行哦。
内容的提问来源于stack exchange,提问作者Zyko
相关产品推荐
相关产品推荐

