<p>首先,我们分配一个名为<code>m</code>的新列,它是<code>drivers is MAZ</code>和<code>counts is 0</code>行的布尔值</p>
<p>然后我们使用<code>GroupBy</code>并得到<code>any m is True</code>所在的所有组</p>
<p>然后我们使用布尔索引来得到与<code>~</code>相反的结果</p>
<p>使用的方法:</p>
<ul>
<li><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.assign.html" rel="nofollow noreferrer">^{<cd7>}</a></li>
<li><a href="https://pandas.pydata.org/pandas-docs/version/1.0.0/reference/api/pandas.Series.eq.html" rel="nofollow noreferrer">^{<cd8>}</a></li>
<li><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.any.html" rel="nofollow noreferrer">^{<cd9>}</a></li>
</ul>
<pre><code>mask = (df.assign(m=(df['drivers'].eq('MAZ') & ~df['counts']))
.groupby(['regiment','trucks'])['m'].transform('any')
)
df[~mask]
regiment trucks drivers counts
4 51st Tatra 810 MAN 0
5 51st Tatra 810 MAN 0
6 51st Tatra 810 MERC 1
7 51st Tatra 810 TATA 0
8 51st ZIS-150 TATA 1
9 51st ZIS-150 MAN 2
10 51st ZIS-150 REN 3
11 51st ZIS-150 TATA 4
</code></pre>