我有一个数据框,其值如下:
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]
那样调用并将该计数分配给变量?
答案 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