如何按键访问pandas groupby数据帧

如何通过键访问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

发表评论