通过 Group By Pandas 创建两个聚合列
Posted
技术标签:
【中文标题】通过 Group By Pandas 创建两个聚合列【英文标题】:Create two aggregate columns by Group By Pandas 【发布时间】:2017-01-17 11:07:06 【问题描述】:我是 DataFrames 的新手,我想对多列进行分组,然后对最后一列求和并保持计数。例如
s = pd.DataFrame(np.matrix([[1, 2,3,4], [3, 4,7,6],[3,4,5,6],[1,2,3,7]]), columns=['a', 'b', 'c', 'd'])
a b c d
0 1 2 3 4
1 3 4 7 6
2 3 4 5 6
3 1 2 3 7
我想对a
、b
和c
进行分组,然后对d
求和并计算组中的元素。
我可以数数
s = s.groupby(by=["a", "b", "c"])["d"].count()
a b c
1 2 3 2
3 4 5 1
7 1
我可以总结
s = s.groupby(by=["a", "b", "c"])["d"].sum()
a b c
1 2 3 11
3 4 5 6
7 6
但是我想将它组合起来,使得生成的数据框同时具有 sum 和 count 列。
a b c sum count
1 2 3 11 2
3 4 5 6 1
7 6 1
【问题讨论】:
【参考方案1】:您可以使用aggregate
,或更短的版本agg
:
print (s.groupby(by=["a", "b", "c"])["d"].agg([sum, 'count']))
#print (s.groupby(by=["a", "b", "c"])["d"].aggregate([sum, 'count']))
sum count
a b c
1 2 3 11 2
3 4 5 6 1
7 6 1
Pandas documentation.
size
和count
的区别是:
size
计算 NaN
值,count
不计算。
如果还需要计数NaN
值:
print (s.groupby(by=["a", "b", "c"])["d"].agg([sum, 'size']))
sum size
a b c
1 2 3 11 2
3 4 5 6 1
7 6 1
【讨论】:
以上是关于通过 Group By Pandas 创建两个聚合列的主要内容,如果未能解决你的问题,请参考以下文章