按数据框访问分组中的聚合值[重复]

Posted

技术标签:

【中文标题】按数据框访问分组中的聚合值[重复]【英文标题】:Access Aggregated Values in Group By Data Frame [duplicate] 【发布时间】:2020-08-07 09:46:51 【问题描述】:

我有一个数据框,其值如下:

name    action           time
------------------------------
Sam     enters building  20:00
Chris   enters building  20:15
Sam     walks up stairs  20:20
Steve   leaves building  20:25
James   enters building  20:30
Chris   takes elevator   20:32
Sam     leaves building  20:35
Chris   leaves building  20:40
Sam     enters building  20:45
...

我想获得每个人不同动作的计数。我可以使用df.groupby(['name','action'], as_index=False).size()

来完成

但是,这给了我一个视觉效果,但我无能为力。我想将这些计数用于不同的目的。如何将这些数据放入可访问的数据框中,以便我可以获得每个人进出建筑物的次数等信息。例如,我可以像 df['name' == 'Sam' & 'action'=='enters building] 这样调用并将该计数分配给变量?

【问题讨论】:

你能分享你的预期输出吗? 请提供minimal reproducible example。你有没有尝试过什么,做过什么研究? 【参考方案1】:

要使其成为数据框,您可以使用.reset_index(),然后将其设置为df。

df=df.groupby(['name','action'], as_index=False).size().reset_index()

【讨论】:

【参考方案2】:

只需使用 count 代替 - size 不是 pandas 中的聚合函数,这就是为什么你的命令 as_index=False 什么都不做。

df.groupby(['name','action'], as_index=False).count()

输出:

    name           action  time
0  Chris  enters building     1
1  Chris  leaves building     1
2  Chris   takes elevator     1
3  James  enters building     1
4    Sam  enters building     2
5    Sam  leaves building     1
6    Sam  walks up stairs     1
7  Steve  leaves building     1

【讨论】:

【参考方案3】:

您也可以使用您最初的想法。 在这种情况下,您将获得 Pandas 系列。您可以直接索引您感兴趣的值。

table = df.groupby(['name','action'], as_index=False).size()
table['Sam']['enters building']

【讨论】:

【参考方案4】:

这是一个不同的解决方案,您可以添加 size,以便您仍然可以使用原始数据框:

df['size'] = df.groupby(['name', 'action']).transform(np.size)
df.iloc[[0,2,-1], :]


#   name  action            time    size
# 0 Sam   enters building   20:00   2
# 2 Sam   walks up stairs   20:20   1
# 8 Sam   enters building   20:45   2

【讨论】:

以上是关于按数据框访问分组中的聚合值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何聚合数据框并通过 r 中的重复行对列的值求和

python--pandas分组聚合

到目前为止,按同一组中的聚合元素分组 - Pandas

在 R 中对列表中的唯一值进行分组的方法?

通过按 python 中数据框列中的值分组来创建字典

SQL:如何按列分组而不爆炸表中的聚合值