按数据框分组访问汇总值

时间:2020-04-23 22:13:12

标签: python pandas pandas-groupby

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

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]那样调用并将该计数分配给变量?

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

仅使用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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

这是一个不同的解决方案,您添加了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