2015-12-10 5 views
1

Я сгруппированный кадр данных, который я агрегируются с кол:Aggregation агрегированных значений

counted = df.groupby(['col1','col2']).count() 

Теперь, подсчитанных на самом деле:

col1 col2 
1  A 22 
     B 21 
     C 1 
2  G 22 
... 

Есть ли способ, чтобы вычислить зЬй/Мах подсчитанные значения, так что я получаю:

col1 std 
1  1.34 
2  3 

и так далее ..

+0

, когда вы запрашиваете std/max на каком уровне вы после? уровень индекса 0 или 1? Вы можете просто сделать группу снова и передать диктовку funcs, используя 'agg': http://pandas.pydata.org/pandas-docs/stable/groupby.html#applying-multiple-functions-at-once – EdChum

ответ

1

Все, что вам нужно сделать, это вызвать группу 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 
Смежные вопросы