Supposons que j'ai deux nivelé dataframeComment agréger des sous-données dans des pandas?
In [1]: index = pd.MultiIndex.from_tuples([(i,j) for i in range(3)
: for j in range(1+i)], names=list('ij'))
: df = pd.DataFrame(0.1*np.arange(2*len(index)).reshape(-1,2),
: columns=list('xy'), index=index)
: df
Out[1]:
x y
i j
0 0 0.0 0.1
1 0 0.2 0.3
1 0.4 0.5
2 0 0.6 0.7
1 0.8 0.9
2 1.0 1.1
multi-indexé et je veux exécuter une fonction personnalisée sur chaque sous-trame de données:
In [2]: def my_aggr_func(subdf):
: return subdf['x'].mean()/subdf['y'].mean()
:
: level0 = df.index.levels[0].values
: pd.DataFrame({'mean_ratio': [my_aggr_func(df.loc[i]) for i in level0]},
: index=pd.Index(level0, name=index.names[0]))
Out[2]:
mean_ratio
i
0 0.000000
1 0.750000
2 0.888889
Y at-il une façon élégante de le faire avec df.groupby('i').agg(__something__)
ou quelque chose de similaire?
Merci! J'ai complètement oublié "appliquer". –