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对象。