<p>您可以创建一列绝对差异:</p>
<pre><code>df['dif'] = (df['values'] - 2).abs()
df
Out:
category values dif
0 a 1 1
1 b 2 0
2 b 3 1
3 b 4 2
4 c 5 3
5 a 4 2
6 b 3 1
7 c 2 0
8 c 1 1
9 a 0 2
</code></pre>
<p>然后使用<code>groupby.transform</code>检查每组的最小值是否等于您计算的差值:</p>
^{pr2}$
<p><code>df.groupby('category')['dif'].idxmin()</code>还将为每个类别提供最接近值的索引。你也可以用它来绘制地图。在</p>
<p>供选择:</p>
<pre><code>df.loc[df.groupby('category')['dif'].idxmin()]
Out:
category values dif
0 a 1 1
1 b 2 0
7 c 2 0
</code></pre>
<p>对于分配:</p>
<pre><code>df['is_closest'] = False
df.loc[df.groupby('category')['dif'].idxmin(), 'is_closest'] = True
df
Out:
category values dif is_closest
0 a 1 1 True
1 b 2 0 True
2 b 3 1 False
3 b 4 2 False
4 c 5 3 False
5 a 4 2 False
6 b 3 1 False
7 c 2 0 True
8 c 1 1 False
9 a 0 2 False
</code></pre>
<p>这些方法之间的区别在于,如果您将相等与差异进行比较,则对于所有行,在ties的情况下,都将为True。但是,使用<code>idxmin</code>时,它将在第一次出现时返回True(每个组只返回一个)。在</p>