擅长:python、mysql、java
<p>有更快捷的方法。这里有一个效率低下的<code>apply</code>方法是。在</p>
<pre><code>In [3270]: def custcum(x):
...: total = 0
...: for i, v in x.iterrows():
...: total += v.spend
...: x.loc[i, 'cum'] = total
...: if total >= v.hurdle:
...: total = 0
...: return x
...:
In [3271]: df.groupby('customer').apply(custcum)
Out[3271]:
customer spend hurdle cum
0 A 20 50 20.0
1 A 31 50 51.0
2 A 20 50 20.0
3 B 50 100 50.0
4 B 51 100 101.0
5 B 30 100 30.0
</code></pre>
<p>您可以考虑使用<code>cython</code>或<code>numba</code>来加速<code>custcum</code></p>
<hr/>
<p>[更新]</p>
<p><a href="https://stackoverflow.com/a/46784560/2137255">Ido s</a>答案的改进版本。在</p>
^{pr2}$