如何通过键访问groupby对象中相应的groupby数据帧
使用以下groupby:
rand=np.random.RandomState(1)
df=pd.DataFrame({'A':['foo','bar']*3,
“B”:兰特·兰登(6),
'C':rand.randint(0,20,6)})
gb=df.groupby(['A'])
我可以遍历它以获取密钥和组:
[11]on
:对于k,gb中的gp:
打印“key=”+str(k)
打印总成
键=条
A、B、C
1巴-0.611756 18
3巴-1.072969 10
5巴-2.301539 18
key=foo
A、B、C
0 foo 1.624345 5
2 foo-0.528172 11
4 foo 0.865408 14
我希望能够通过其密钥访问组:
[12]on
:gb['foo']
Output[12]:
A、B、C
0 foo 1.624345 5
2 foo-0.528172 11
4 foo 0.865408 14
但是当我尝试使用gb[('foo',)]时,我得到了一个奇怪的pandas.core.groupby.DataFrameGroupBy对象,它似乎没有任何与我想要的数据帧对应的方法
我能想到的最好的办法是:
[13]on
:定义gb_-df_键(gb,键,原始df):
ix=gb.索引[键]
返回原点方向ix[ix]
gb_df_键(gb,'foo',df)
Output[13]:
A、B、C
0 foo 1.624345 5
2 foo-0.528172 11
4 foo 0.865408 14
但考虑到熊猫在这些事情上通常是多么的好,这有点令人讨厌。
这样做的内在方式是什么
您可以使用get_group方法:
[21]on
:gb.get\u组('foo')
Output[21]:
A、B、C
0 foo 1.624345 5
2 foo-0.528172 11
4 foo 0.865408 14
注意:这不需要为每个组创建每个子数据帧的中间字典/副本,因此比使用dict(iter(gb))创建原始字典更节省内存。这是因为它使用groupby对象中已有的数据结构。
您可以使用groupby切片选择不同的列:
[22]on
:gb[[quot;A";,[quot;B";].获取组(";foo";)
Output[22]:
A B
0 foo 1.624345
2 foo-0.528172
4 foo 0.865408
At[23]on:gb[";C";].get_组(";foo";)
Output[23]:
0 5
2 11
4 14
名称:C,数据类型:int64