<p>首先对数据帧进行排序</p>
<pre><code>df.sort_values(['ID', 'date'], inplace=True)
# use cumsum to calculate how many times the target eq 1
df['tag'] = df['target'] == 1
df['tag'] = df.groupby('ID')['tag'].cumsum()
# for every group use shift(1) to include the first 1
df['tag2'] = df.groupby('ID')['tag'].shift(1).fillna(0)
cond = df['tag2'] == 0
df[cond]
</code></pre>
<p>结果:</p>
<pre><code> ID date target tag tag2
0 a0 2019-11-01 0 0.0 0.0
1 a0 2019-12-01 0 0.0 0.0
2 a0 2020-01-01 0 0.0 0.0
3 a1 2019-11-01 0 0.0 0.0
4 a1 2019-12-01 0 0.0 0.0
5 a1 2020-01-01 1 1.0 0.0
8 a2 2019-11-01 0 0.0 0.0
9 a2 2019-12-01 1 1.0 0.0
</code></pre>
<hr/>
<p>df:</p>
<pre><code> ID date target tag tag2
0 a0 2019-11-01 0 0.0 0.0
1 a0 2019-12-01 0 0.0 0.0
2 a0 2020-01-01 0 0.0 0.0
3 a1 2019-11-01 0 0.0 0.0
4 a1 2019-12-01 0 0.0 0.0
5 a1 2020-01-01 1 1.0 0.0
6 a1 2020-02-01 1 2.0 1.0
7 a1 2020-03-01 0 2.0 2.0
8 a2 2019-11-01 0 0.0 0.0
9 a2 2019-12-01 1 1.0 0.0
10 a2 2020-03-01 0 1.0 1.0
11 a2 2020-04-01 1 2.0 1.0
</code></pre>