擅长:python、mysql、java
<p>你能做到的</p>
<pre><code>import numpy as np
def get_value(x):
s = x['taken']
# Get a mask of duplicate sequeence and change values using np.where
mask = s.ne(s.shift()).cumsum().duplicated(keep=False)
news = np.where(mask,100,x['score'])
# if last number is 2 then change the news value to 100
if s[s.idxmax()] == 2: news[-1] = 100
return pd.Series(news)
df['score'] = df.groupby('month').apply(get_value).values
</code></pre>
<p>输出:</p>
^{pr2}$
<p>几乎相同的速度,但“冷速”是赢家</p>
<pre><code>ndf = pd.concat([df]*10000).reset_index(drop=True)
%%timeit
ndf['score'] = ndf.groupby('month').apply(foo)
10 loops, best of 3: 40.8 ms per loop
%%timeit
ndf['score'] = ndf.groupby('month').apply(get_value).values
10 loops, best of 3: 42.6 ms per loop
</code></pre>