擅长:python、mysql、java
<p>另一个解决方案:</p>
<pre><code>df["tmp"] = df["subject"].str.contains("math") + (
df["subject"].str.contains("social") * 2
)
df["tmp"] = (
df.groupby("name")
.rolling(3)["tmp"]
.apply(lambda x: x.eq([2, 2, 1]).all())
.values
)
df["tmp"] = df.groupby("name")["tmp"].transform(lambda x: x.shift(-2))
print(df[df["tmp"] != 1].drop(columns=["tmp"]))
</code></pre>
<p>印刷品:</p>
<pre class="lang-none prettyprint-override"><code> name subject
1 mark social
2 mark maths
3 mark social
4 mark maths
5 mark social
6 mark social
7 mark social
9 mark social
10 mark maths
11 mark social
13 mark social
14 mark maths
15 mark social
16 mark social
17 mark social
18 mark social
19 mark social
21 mark social
22 mark math
</code></pre>