<p>您可以尝试:</p>
<pre class="lang-py prettyprint-override"><code>new_col = (df.query("Salary >= 100")
.groupby("Department")
.apply(lambda x: x.Year - x.iloc[0].Year)
.reset_index(level=0, drop=True)
.T)
df["hit100after"] = new_col
df["hit100after"] = df["hit100after"].fillna(0).astype(int)
</code></pre>
<p>首先,我们查看工资大于100(<code>query</code>)的条目,然后按部门对它们进行分组(<code>groupby</code>),应用函数获取与部门中第一个条目(<code>apply</code>和<code>iloc[0]</code>)的年度差异,去掉第0级的部门名称(<code>reset_index</code>,其中<code>drop</code>为<code>True</code>),并进行换位(<code>T</code>)以确保其垂直,以便于与原始<code>df</code>对齐</p>
<p>最后,我们将这个新列分配给<code>df</code>,但由于我们只选择了那些带有<code>Salary >= 100</code>的列,所以分配时有<code>NaN</code>;因此<code>fillna(0)</code>。由于<code>NaN</code>从技术上讲是一个浮点数,所以它使序列浮动,因此我们在最后转换为<code>int</code></p>
<p>要获得:</p>
<pre><code> Name Year Department Salary hit100after
0 John 2018 R&D 80 0
1 Marie 2018 Legal 90 0
2 Jill 2018 Legal 100 0
3 John 2019 R&D 85 0
4 Marie 2019 Legal 95 0
5 Jill 2019 Legal 105 1
6 John 2020 R&D 90 0
7 Marie 2020 Legal 100 2
8 Jill 2020 Legal 110 2
</code></pre>