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

Pandas中如何访问分组列表里每个DataFrame的指定列?

解决GroupBy分组后提取指定列的问题

嘿,我明白你遇到的困扰了!你之前的写法行不通,核心是对GroupBy对象的迭代逻辑理解有点偏差,我来一步步帮你搞定:

问题根源

当你遍历grouped(GroupBy对象)时,循环变量i其实是每个分组的名称(也就是categories列的各个取值,比如"A"、"B"这类分类值),而不是索引。而且grouped[i]并不是用来获取对应分组DataFrame的正确方式——GroupBy对象的索引访问是用来选取列的,不是分组。

正确的解决方法

方法1:直接遍历GroupBy对象(推荐)

GroupBy对象迭代时,会返回(分组名称, 对应分组DataFrame)的元组,我们可以直接解构这个元组,轻松提取每个分组的vals列:

# 解构元组,直接获取分组的DataFrame并提取列
my_array = [group["vals"] for name, group in grouped]

这样得到的my_array就是由每个分组的vals列(Series类型)组成的列表。

方法2:先转成列表再处理

如果你已经把grouped转成了列表(比如group_list = list(grouped)),那列表里的每个元素都是(分组名称, 分组DataFrame)的元组,你可以这样操作:

group_list = list(grouped)
# 方式a:通过索引取DataFrame部分
my_array = [group[1]["vals"] for group in group_list]
# 方式b:解构元组(代码更清晰易读)
my_array = [g["vals"] for _, g in group_list]

方法3:用get_group(适合单独获取特定分组)

如果你想通过分组名称来精准获取对应列,可以用get_group方法,不过遍历所有分组的话效率不如前两种:

# 先获取所有分组的名称
group_names = grouped.groups.keys()
# 逐个获取分组并提取列
my_array = [grouped.get_group(name)["vals"] for name in group_names]

示例验证

我们用一个简单的测试数据来验证效果:

import pandas as pd

# 构造测试DataFrame
df = pd.DataFrame({
    "categories": ["A", "A", "B", "B", "C"],
    "vals": [10, 20, 30, 40, 50]
})

# 执行分组操作
grouped = df.groupby("categories")

# 使用方法1提取列
my_array = [group["vals"] for name, group in grouped]

# 打印结果查看
for idx, series in enumerate(my_array):
    print(f"分组{idx+1}的vals列:\n{series}\n")

输出结果会是:

分组1的vals列:
0    10
1    20
Name: vals, dtype: int64

分组2的vals列:
2    30
3    40
Name: vals, dtype: int64

分组3的vals列:
4    50
Name: vals, dtype: int64

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:04:51