python - Pandas new column from groupby averages -


i have dataframe

>>> df = pd.dataframe({'a':[1,1,1,2,2,2], ...                    'b':[10,20,20,10,20,20], ...                    'result':[100,200,300,400,500,600]}) ...  >>> df      b  result 0  1  10     100 1  1  20     200 2  1  20     300 3  2  10     400 4  2  20     500 5  2  20     600 

and want create new column average result corresponding values 'a' , 'b'. can values groupby:

>>> df.groupby(['a','b'])['result'].mean()  b  1  10    100    20    250 2  10    400    20    550 name: result, dtype: int64 

but can not figure out how turn new column in original dataframe. final result should this,

>>> df      b  result  avg_result 0  1  10     100         100 1  1  20     200         250 2  1  20     300         250 3  2  10     400         400 4  2  20     500         550 5  2  20     600         550 

i looping through combinations of 'a' , 'b' slow , unwieldy larger sets of data. there simpler , faster way go.

you need transform:

df['avg_result'] = df.groupby(['a','b'])['result'].transform('mean') 

this generates correctly indexed column of groupby values you:

     b  result  avg_result 0  1  10     100         100 1  1  20     200         250 2  1  20     300         250 3  2  10     400         400 4  2  20     500         550 5  2  20     600         550 

Comments

Popular posts from this blog

matlab - error with cyclic autocorrelation function -

django - (fields.E300) Field defines a relation with model 'AbstractEmailUser' which is either not installed, or is abstract -

c# - What is a good .Net RefEdit control to use with ExcelDna? -