我有一个如下表:
name type val
A online 12
B online 24
A offline 45
B online 32
A offline 43
B offline 44
我想以一种dataframe
的方式使用它,使其可以groupby
带有多个列name
和type
,其中也有返回{{1 }}中的记录,其中count
被添加为相同类型的记录。它应该如下所示:
val
我已经尝试过name type count val
A online 1 12
offline 2 88
B online 2 56
offline 1 44
进行添加,但是无法添加记录数。
答案 0 :(得分:2)
将参数sort=False
添加到groupby
,以避免进行默认排序,并通过agg
进行聚合,其中元组具有新的列名和聚合函数,最后reset_index
代表MultiIndex
到列:
df1 = (df.groupby(['name', 'type'], sort=False)['val']
.agg([('count', 'count'),('val', 'sum')])
.reset_index())
print (df1)
name type count val
0 A online 1 12
1 B online 2 56
2 A offline 2 88
3 B offline 1 44
答案 1 :(得分:0)
您可以尝试旋转
df.pivot_table(index=['name','type'],aggfunc=['count','sum'],values='val')
count sum
val val
name type
A offline 2 88
online 1 12
B offline 1 44
online 2 56