如何通过Pandas groupby.apply()获取第i组对应的DataFrame?
获取Pandas Groupby后的指定组DataFrame
你不需要用apply()来提取单组数据,直接对GroupBy对象操作就可以,下面是两种实用方法:
方法一:将GroupBy对象转为列表,通过索引提取
GroupBy对象可以直接转成列表,列表里的每个元素是**(组标签, 对应DataFrame)**的元组,通过索引就能拿到目标组的DataFrame:
import pandas as pd dat = pd.DataFrame({'name' : ['A', 'C', 'A', 'B', 'C'], 'val' : [1,2,1,2,4]}) # 创建GroupBy对象 grouped = dat.groupby('name') # 转为列表格式 group_list = list(grouped) # 取第1组(索引从0开始)的DataFrame first_group_df = group_list[0][1] print(first_group_df)
输出结果:
name val 0 A 1 2 A 1
方法二:用get_group()方法精准提取
如果知道目标组的标签名,直接用get_group()最方便;如果只知道组的位置,先获取组标签列表再提取:
# 已知组名时直接提取 group_a_df = grouped.get_group('A') print(group_a_df) # 仅知道组位置时,先获取所有组标签 group_labels = list(grouped.groups.keys()) # 取第2组(索引1)的DataFrame second_group_df = grouped.get_group(group_labels[1]) print(second_group_df)
第二组的输出结果:
name val 1 C 2 4 C 4
补充说明:你之前用groupby('name').apply(lambda x: x)返回原DataFrame,是因为apply默认会把各组的处理结果拼接回原数据结构,这不是提取单组的正确用法,上面的方法更高效直接。
内容的提问来源于stack exchange,提问作者Brian Smith
相关产品推荐
相关产品推荐

