[英]Pandas count size of groupby groups idiomatically
在 Pandas 中进行 groupby 操作后,我经常想要一个数据帧,用于计算每个组中有多少成员。 我有一种详细的方法来处理大小、重置索引和重命名,但我相信有更好的方法。
这是我想做的一个例子:
import pandas as pd
import numpy as np
np.random.seed(0)
colors = ['red','green','blue']
cdf = pd.DataFrame({
'color1':np.random.choice(colors,10),
'color2':np.random.choice(colors,10),
})
print(cdf)
#better way to do next line? (somehow use agg?)
gb_count = cdf.groupby(['color1','color2']).size().reset_index().rename(columns={0:'num'})
print(gb_count)
#cdf.groupby(['color1','color2']).count() #<-- this doesn't work
最终输出:
color1 color2 num
0 blue green 1
1 blue red 1
2 green blue 3
3 red green 4
4 red red 1
为避免获得 MultiIndex,请使用as_index=False
:
cdf.groupby(['color1','color2'], as_index=False).size()
color1 color2 size
0 blue green 1
1 blue red 1
2 green blue 3
3 red green 4
4 red red 1
如果您明确想将新列命名为num
。 您可以将reset_index
与name=..
一起使用,因为groupby
将返回一个系列:
cdf.groupby(['color1','color2']).size().reset_index(name='num')
color1 color2 num
0 blue green 1
1 blue red 1
2 green blue 3
3 red green 4
4 red red 1
另一种方法是在agg
操作reset the grouper_index
发送到to_frame(with preferred column name)
后reset the grouper_index
。
gb_count = cdf.groupby(['color1','color2']).agg('size').to_frame('num').reset_index()
color1 color2 num
0 blue green 1
1 blue red 1
2 green blue 3
3 red green 4
4 red red 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.