在 Pandas 中进行多列分组后,如何计算每个组的子组中计数的平均值?

3

我有一些数据如下:

+---------+----------+----------+
| groupX  | groupY   | id       |
+---------+----------+----------+
| A       |  1       | e13r2    |
| B       |  2       | efwu1    |
| A       |  1       | efgi3    |
| B       |  4       | eoij9    |
+---------+----------+----------+

df = pd.DataFrame([['A',1,'e13r2'],['B',2,'efwu1'],['A',1,'efgi3'],['B',4,'eoij9']],
                   columns=['groupX','groupY','id'])

让我演示一下我的目标:

我想按groupX分组,然后按groupY再分组。例如,这将给我们提供组A中的所有内容。组A进一步分为子组。在这种情况下,组A中只有1个子组。在这个子组中有两个id:e13r2efgi3。同样,在组B中有2个子组。子组2包含IDefwu1,子组4包含IDeoij9

因此,组A包含一个子组。这个子组里有两个id。平均而言,组A的子组中有2个id。

组B包含两个子组。子组2包含一个id,子组4包含一个id。平均而言,组B的子组中有1个id。

因此,我正在计算每个组的子组内计数的平均值。

我正在寻找一个Pandas命令,可以返回以下结果:

+---------+--------------------------------+
| groupX  | mean counts within subgroups   |
+---------+--------------------------------+
| A       |  2                             |
| B       |  1                             |
+---------+--------------------------------+

目前我的尝试是:

df.groupby(['groupX','groupY']).count()

但是我不知道如何从这里继续。

3个回答

4

在这种情况下,你可以链接使用groupby

level=0 是指你的索引,即 groupX,你也可以直接使用索引名称。

df1 = df.groupby(['groupX','groupY'])['id'].size().groupby(level=0).mean()
#or
#df.groupby(['groupX','groupY'])['id'].size().groupby('groupX').mean()
#or
#df.groupby(['groupX','groupY'])['id'].size().mean(level=0)


groupX
 A           2
 B           1

@QuangHoang 哇,我不知道那个!谢谢伙计。 - Umar.H

1
你可以在 groupX 上进行另一次分组:df.groupby(['groupX','groupY']).count().groupby(['groupX']).mean() 输出:
        id
groupX    
A        2
B        1

1

试试这个:

>>> df.groupby(["groupX", "groupY"]).count().mean(level = 0)

        id
groupX    
A        2
B        1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接