我在数据框中进行了groupby
操作,以按特定列的分类值进行分组。类似的东西:
grouped = df.groupby(df["categories"])
如果我list(grouped)
我得到的是一个数据帧列表,每个类别一个。到目前为止,非常好。
但我想在列表中的每个数据框中选择一个特定的列。想象一下,我要访问的列名为vals
。我想要这样的东西:
my_array = [grouped[i]["vals"] for i in grouped]
但是之前的命令不起作用,我尝试过的其他组合都没有。你有什么建议吗?感谢。
答案 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]