<p>如果安排<code>myfunc</code>返回一个列为<code>['A','B','C','D']</code>且行索引为<code>['min', 'mean', 'max']</code>的数据帧,则可以使用<code>groupby/apply</code>调用函数(每个组一次)并根据需要连接结果:</p>
<pre><code>import numpy as np
import pandas as pd
def myfunc(g):
result = pd.DataFrame({'min':np.min(g),
'mean':np.mean(g),
'max':np.max(g)}).T
return result
df = pd.DataFrame({'A': [1, 1, 1, 1, 2, 2, 3],
'B': [10, 12, 11, 10, 11, 12, 14],
'C': [22, 20, 8, 10, 13, 10, 0],
'D': [14, 37, 18, 6, 4, 12, 5]})
result = df.groupby('A')[['B','C']].apply(myfunc)
result = result.unstack(level=-1)
print(result)
</code></pre>
<p>印刷品</p>
^{pr2}$
<hr/>
<p>对于可能遇到此问题且不需要自定义函数的其他人,请注意
您应该始终使用<a href="http://pandas.pydata.org/pandas-docs/stable/api.html#id35" rel="noreferrer">builtin aggregators</a>(下面,由
字符串<code>'min'</code>,<code>'mean'</code>和{<cd7>})如果可能的话。他们的表现比
自定义Python函数。令人高兴的是,在这个玩具问题中,它产生了期望的结果:</p>
<pre><code>In [99]: df.groupby('A')[['B','C']].agg(['min','mean','max'])
Out[99]:
B C
min mean max min mean max
A
1 10 10.75 12 8 15.0 22
2 11 11.50 12 10 11.5 13
3 14 14.00 14 0 0.0 0
</code></pre>