访问pandas中分组列表中的列

时间:2018-04-23 12:33:02

标签: python pandas pandas-groupby

我在数据框中进行了groupby操作,以按特定列的分类值进行分组。类似的东西:

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

如果我list(grouped)我得到的是一个数据帧列表,每个类别一个。到目前为止,非常好。

但我想在列表中的每个数据框中选择一个特定的列。想象一下,我要访问的列名为vals。我想要这样的东西:

my_array = [grouped[i]["vals"] for i in grouped]

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

2 个答案:

答案 0 :(得分:1)

grouped返回tuple s - 群组名称和DataFrame,因此可能的解决方案是:

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

或者:

#select second value of tuple - df
my_array = [i[1]['vals'] for i 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]

答案 1 :(得分:0)

根据您共享的代码,您似乎使用rbind()作为索引,这是不正确的。在您的情况i中,for i in grouped是列表中的实际对象。

尝试其中一项

i

my_array = [df.vals for i, df in grouped]