<p>你不需要<code>apply</code>。Groupby on boolean series创建用于切片所需输出的掩码。作为您的新要求,每个组在不同的<code>max_value</code>上切片。您需要使用<code>Asset</code>和<code>max_value_list</code>的唯一值创建一个字典,并将其映射到<code>Asset</code>列以创建一系列<code>s</code>的max_值。最后,将<code>Monthly Value</code>与<code>s</code>和groupby <code>cumsum</code>进行比较,以创建用于切片的掩码<code>m</code>。(<strong>注意</strong>:<em>我将样本更改为不同的值,以显示不同<code>max_values</code></em>上的切片)</p>
<pre><code>Modified sample `df` to show slicing on different max_value
Out[334]:
date Asset Monthly Value
0 2019-01-01 Asset A 100
1 2019-02-01 Asset A 200
2 2019-03-01 Asset A 300
3 2019-04-01 Asset A 400
4 2019-01-01 Asset A 500
5 2019-02-01 Asset A 600
6 2019-03-01 Asset B 100
7 2019-04-01 Asset B 350
8 2019-01-01 Asset B 450
9 2019-02-01 Asset B 200
10 2019-03-01 Asset B 300
11 2019-04-01 Asset B 200
max_value_list = [250, 300]
max_dict = dict(zip(df.Asset.unique(), max_value_list))
s = df.Asset.map(max_dict)
m = (df['Monthly Value'] > s).groupby(df.Asset).cumsum().ne(0)
df[m]
Out[333]:
date Asset Monthly Value
2 2019-03-01 Asset A 300
3 2019-04-01 Asset A 400
4 2019-01-01 Asset A 500
5 2019-02-01 Asset A 600
7 2019-04-01 Asset B 350
8 2019-01-01 Asset B 450
9 2019-02-01 Asset B 200
10 2019-03-01 Asset B 300
11 2019-04-01 Asset B 200
</code></pre>