Python 访问pandas中分组列表中的列

Python 访问pandas中分组列表中的列,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我在数据帧中执行了groupby操作,以根据特定列的分类值进行分组。比如: grouped = df.groupby(df["categories"]) my_array = [grouped[i]["vals"] for i in grouped] 如果我做了list(grouped)我得到的是一个数据帧列表,每个类别一个。到目前为止,一切顺利 但是我想在列表中的每个数据帧中选择一个特定的列。假设我要访问的列名为vals。我想要像这样的东西: grouped = df.groupby(df

我在数据帧中执行了
groupby
操作,以根据特定列的分类值进行分组。比如:

grouped = df.groupby(df["categories"])
my_array = [grouped[i]["vals"] for i in grouped]
如果我做了
list(grouped)
我得到的是一个数据帧列表,每个类别一个。到目前为止,一切顺利

但是我想在列表中的每个数据帧中选择一个特定的列。假设我要访问的列名为
vals
。我想要像这样的东西:

grouped = df.groupby(df["categories"])
my_array = [grouped[i]["vals"] for i in grouped]

但是前面的命令不起作用,我尝试过的其他组合也不起作用。你有什么建议吗?谢谢。

分组
返回
元组
s-组名和
数据帧
,因此可能的解决方案是:

#unpack tuples to i, df
my_array = [df['vals'] for i, df in grouped]
或:

样本

df = pd.DataFrame({'D':[1,3,5,7],
                   'vals':[5,3,6,9],
                   'categories':list('aabb')})

print (df)
   D categories  vals
0  1          a     5
1  3          a     3
2  5          b     6
3  7          b     9

grouped = df.groupby(df["categories"])

print (list(grouped))
[('a',    D categories  vals
0  1          a     5
1  3          a     3), ('b',    D categories  vals
2  5          b     6
3  7          b     9)]

my_array = [df['vals'] for i in grouped]
print (my_array)
[0    5
1    3
2    6
3    9
Name: vals, dtype: int64, 0    5
1    3
2    6
3    9
Name: vals, dtype: int64]

从您共享的代码来看,您似乎正在使用
i
作为索引,这是不正确的。在您的案例中,
对于分组中的i
i
是列表中的实际对象

试试其中一种

my_数组=[df.vals for i,df in group]


my_array=[grouped[1][i][“vals”]对于范围内的i(len(grouped))]

谢谢,第一个选项似乎可以满足我的需要。@David-是的,这也是我喜欢的方式,因为更好:)对不起,但是你的方法不起作用。我认为它们失败的原因是groupby列表的元组结构,如@jezrael注释。我误解了
grouped
只是一个数据帧列表。我所做的编辑引用了分组为本机DataFrameGroupBy对象。