熊猫习惯性地对groupby组的大小进行计数

时间:2020-10-12 21:27:01

标签: python 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

2 个答案:

答案 0 :(得分:2)

为避免获取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_indexname=..一起使用,因为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

答案 1 :(得分:1)

另一种方法是在reset the grouper_index操作中将to_frame(with preferred column name)发送给agg之后。

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