Python 基于聚合值的聚合

Python 基于聚合值的聚合,python,pandas,Python,Pandas,我有一个分组的数据帧,我使用count进行聚合: counted = df.groupby(['col1','col2']).count() 现在,实际上是: col1 col2 1 A 22 B 21 C 1 2 G 22 ... 是否有任何方法可以计算计数值的std/max,以便得到: col1 std 1 1.34 2 3 以此类推..您所要做的就是在counted上调用groupby(),但不是提

我有一个分组的数据帧,我使用count进行聚合:

counted = df.groupby(['col1','col2']).count()
现在,实际上是:

col1  col2
1     A    22
      B    21
      C    1
2     G    22
...
是否有任何方法可以计算计数值的std/max,以便得到:

col1  std
1     1.34
2      3

以此类推..

您所要做的就是在counted上调用groupby(),但不是提供参数“by”,而是提供参数level=0。这将返回另一个DataFrameGroupBy对象,该对象分组在索引的第一级(此处为col1)

然后你可以做任何你喜欢的聚合。下面是我的例子:

#set up a dataframe as in hte provided example
df=pd.DataFrame([[1,'A',22],[1,'B',21],[1,'C',1]],columns=['col1','col2','col3'])
#get the indeces to match the example
counted= df.set_index(['col1','col2'],drop=True,inplace=False)
为了简单起见,我制作了一个df,它只是模仿了您的第一组:

>>> counted
8:            col3
col1 col2      
1    A       22
     B       21
     C        1
再次执行groupby操作,然后执行聚合:

>>> counted.groupby(level=0).std()
9:            col3
col1           
1     11.846237
>>> counted.groupby(level=0).max()
10:       col3
col1      
1       22

当您要求std/max时,您要求的是什么级别?索引级别0还是1?您可以使用
agg
,再次进行分组并传递函数的指令: