<p>我认为您可以在循环中使用的不是列<code>DataFrame</code><code>df</code>,而是列<code>price</code>的组<code>price</code>:</p>
<pre><code>import pandas as pd
import numpy as np
np.random.seed(1)
df = pd.DataFrame(np.random.randint(10, size=(5,3)))
df.columns = ['Product Id','group','price']
print df
Product Id group price
0 5 8 9
1 5 0 0
2 1 7 6
3 9 2 4
4 5 2 4
for group, price in df.groupby(['group']):
print np.percentile(df['price'],60)
4.8
4.8
4.8
4.8
group
for group, price in df.groupby(['group']):
print np.percentile(price['price'],60)
0.0
4.0
6.0
9.0
</code></pre>
<p>另一个<a href="http://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.percentile.html" rel="nofollow">^{<cd6>}</a>的解决方案是输出<code>Serie</code>:</p>
<pre><code>print df.groupby(['group'])['price'].apply(lambda x: np.percentile(x,60))
group
0 0.0
2 4.0
7 6.0
8 9.0
Name: price, dtype: float64
</code></pre>
<p>带<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.DataFrameGroupBy.quantile.html" rel="nofollow">^{<cd8>}</a>的解决方案:</p>
<pre><code>print df.groupby(['group'])['price'].quantile(.6)
group
0 0.0
2 4.0
7 6.0
8 9.0
Name: price, dtype: float64
</code></pre>
<p>按注释编辑:</p>
<p>如果需要新列,请使用<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.transform.html" rel="nofollow">^{<cd9>}</a>,<a href="http://pandas.pydata.org/pandas-docs/stable/groupby.html#transformation" rel="nofollow">docs</a>:</p>
<pre><code>>>> np.random.seed(1)
>>> df = pd.DataFrame(np.random.randint(10,size=(20,3)))
>>> df.columns = ['Product Id','group','price']
>>> df
Product Id group price
0 5 8 9
1 5 0 0
2 1 7 6
3 9 2 4
4 5 2 4
5 2 4 7
6 7 9 1
7 7 0 6
8 9 9 7
9 6 9 1
10 0 1 8
11 8 3 9
12 8 7 3
13 6 5 1
14 9 3 4
15 8 1 4
16 0 3 9
17 2 0 4
18 9 2 7
19 7 9 8
>>> df['percentil'] = df.groupby(['group'])['price'].transform(lambda x: x.quantile(.6))
</code></pre>
<pre><code>>>> df
Product Id group price percentil
0 5 8 9 9.0
1 5 0 0 4.4
2 1 7 6 4.8
3 9 2 4 4.6
4 5 2 4 4.6
5 2 4 7 7.0
6 7 9 1 5.8
7 7 0 6 4.4
8 9 9 7 5.8
9 6 9 1 5.8
10 0 1 8 6.4
11 8 3 9 9.0
12 8 7 3 4.8
13 6 5 1 1.0
14 9 3 4 9.0
15 8 1 4 6.4
16 0 3 9 9.0
17 2 0 4 4.4
18 9 2 7 4.6
19 7 9 8 5.8
</code></pre>