具有多列的groupby,在pandas中具有添加和频率计数[重复]
Posted
技术标签:
【中文标题】具有多列的groupby,在pandas中具有添加和频率计数[重复]【英文标题】:groupby with multiple columns with addition and frequency counts in pandas [duplicate] 【发布时间】:2019-05-07 19:47:47 【问题描述】:我有一个如下所示的表格:
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
,它们还有额外的列返回记录的count
,val
是添加了相同类型的记录。应该是这样的:
name type count val
A online 1 12
offline 2 88
B online 2 56
offline 1 44
我尝试了pd.groupby(['name', 'type'])['val'].sum()
,它给出了加法但无法添加记录数。
【问题讨论】:
【参考方案1】:将参数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
【讨论】:
【参考方案2】:您可以尝试旋转,即
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
【讨论】:
如果有很多列而不是这 3 列怎么办?我是否必须以某种方式提及 aggfunc 的特定列名? 是的,很简单。数据透视表中有一个 values 参数。您可以简单地添加values='val'
以上是关于具有多列的groupby,在pandas中具有添加和频率计数[重复]的主要内容,如果未能解决你的问题,请参考以下文章
一次在多列上使用 pandas groupby().apply(list) [重复]
pandas groupby 多列给出了奇怪的索引行为[重复]
Pandas:在多列中查找具有匹配值的行的 Pythonic 方法(分层条件)