按数据框访问分组中的聚合值[重复]
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
【讨论】:
以上是关于按数据框访问分组中的聚合值[重复]的主要内容,如果未能解决你的问题,请参考以下文章