假設我有兩個層次的多索引的數據幀如何在熊貓中聚合子數據框?
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
而且我想在每個子數據幀運行自定義功能:
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
有一種優雅的方式與df.groupby('i').agg(__something__)
做或類似的東西?
謝謝!我完全忘記了'申請'。 –