是的,支持,請參閱文檔here。
從那裏舉:
In [56]: grouped = df.groupby('A')
In [57]: grouped['C'].agg([np.sum, np.mean, np.std])
Out[57]:
sum mean std
A
bar 0.443469 0.147823 0.301765
foo 2.529056 0.505811 0.966450
也許更加適用於你的問題,你也可以做不同的列不同的功能,像這樣:
In [60]: grouped.agg({'C' : np.sum,
....: 'D' : lambda x: np.std(x, ddof=1)})
....:
Out[60]:
C D
A
bar 0.443469 1.490982
foo 2.529056 0.645875
或者,一個實際的例子更接近您的原始問題:
df = pd.DataFrame({"group":list("aaaaabbbbb"), "A":np.random.rand(10), "B":np.random.rand(10)})
df.groupby("group").agg({"A":[np.sum, np.mean], "B":[np.sum, np.mean]})
A B
sum mean sum mean
group
a 1.450488 0.290098 3.526962 0.705392
b 1.570386 0.314077 2.734465 0.546893
'agg'絕對是答案,但是關於您最後的聲明:您可以('g = df.groupby('id')'),然後在需要時調用函數('g ['x']。mean()'等等),您不需要每次都進行分組 – ayhan