Все, что вам нужно сделать, это вызвать группу 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)
Для простоты, я сделал ФР, который только имитирует первый из группы:
>>> 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? Вы можете просто сделать группу снова и передать диктовку funcs, используя 'agg': http://pandas.pydata.org/pandas-docs/stable/groupby.html#applying-multiple-functions-at-once – EdChum